質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.02%
cURL

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

DELETE

ファイルシステムからファイル、データベースからレコードを削除することまたはメモリ内のオブジェクトの割り当てを取り消すことをさします。もしくは、HTTPプロトコルのDELETEを指すこともあります。

REST

REST(Representational State Transfer)はwebアプリケーションの構築スタイルの一種です。HTTP GET/POSTによってリクエストを送信し、レスポンスはXMLで返されます。SOAPのようなRPCの構築と比べるとサーバからクライアントを分離することが出来る為、人気です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

REST APIでのDELETEメソッドの使い方

TatsunoriKoda
TatsunoriKoda

総合スコア58

cURL

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

DELETE

ファイルシステムからファイル、データベースからレコードを削除することまたはメモリ内のオブジェクトの割り当てを取り消すことをさします。もしくは、HTTPプロトコルのDELETEを指すこともあります。

REST

REST(Representational State Transfer)はwebアプリケーションの構築スタイルの一種です。HTTP GET/POSTによってリクエストを送信し、レスポンスはXMLで返されます。SOAPのようなRPCの構築と比べるとサーバからクライアントを分離することが出来る為、人気です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

1回答

0グッド

0クリップ

4728閲覧

投稿2017/06/06 02:38

現在、PHPを使ってREST API通信を下記のコードで試みていますが、うまくいきません。

php

1$param = array( 2 'key' => 'aaa' 3); 4$param = http_build_query($param, "", "&"); 5 6$apiUrl = "https://xxxx/xxxx/xxxx"; 7$ch = curl_init($url); 8curl_setopt($ch, CURLOPT_URL, $apiUrl); 9curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE'); 10curl_setopt($ch, CURLOPT_POST, true); 11curl_setopt($ch, CURLOPT_POSTFIELDS, $param); 12curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 13curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-HTTP-Method-Override: DELETE') ); 14curl_setopt($ch, CURLOPT_HEADER, 0); 15curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 16curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 17curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 18$result = curl_exec($ch); 19$info = curl_getinfo($ch); 20print_r($info); 21echo "result:".$result;

とやっているのですが、
$infoでは「http_code:404」
$resultは空となります

通常のPOST送信は問題なく通信できています。
POSTの場合のコードも貼り付けておきます。

php

1curl_setopt($ch, CURLOPT_POST,TRUE); 2curl_setopt($ch, CURLOPT_POSTFIELDS,$param); 3curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 4curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 5curl_setopt($ch, CURLOPT_URL, $apiUrl); 6curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: text/xml")); 7curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 8curl_setopt($ch, CURLOPT_TIMEOUT, true); 9$ret = curl_exec($ch);

REST APIをおこなう上での仕様は下記の通りとなります。
HTTPメソッド:POST
拡張メソッド:DELETE
Content-Type:application/x-www-form-urlencoded

以上です。
この分野に精通している方にご教示いただきたく、何卒よろしくお願いいたします。

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答1

0

ベストアンサー

通信相手(サーバ)のログはどうなっていますか?

投稿2017/06/06 03:22

Youichi256

総合スコア199

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

TatsunoriKoda

2017/06/06 03:24

curl_getinfoで取得できるログでしょうか? http_code:404 となります。 これ以外に実際に相手側のログを取る手段はありますか?
Youichi256

2017/06/06 03:28

通信相手は、$apiUrl ですよね。 ログインなどして、そこのログを見ることは出来ませんか? 通信相手は自分の管理下にないサーバですか?
TatsunoriKoda

2017/06/06 03:45

>通信相手は自分の管理下にないサーバですか? そうなんです。他のベンダーになります。 先に提示してある仕様の通りに通信してくれ、としか情報が無いため困っています。
Youichi256

2017/06/06 03:54

ログをもらうことは、出来ませんか? 404なので、$apiUrl が違うと思うのですが、このURIは相手に指定されたものですか?
TatsunoriKoda

2017/06/06 04:00

今ログをもらえないかと問合せているのですが返答が無い状況です。 $apiUrlは正常確認できているPOST送信と同じURLを使っていますし、相手が指定しているURLでもあるため間違えはないはずです。 なのでPOST送信と同じURLでmethodのみを変えて通信する処理になるかと思っています。
Youichi256

2017/06/06 05:12

念のため、実行結果を正確に教えてください。 #URLやIPアドレスなどはマスクで良いです。 こちらで試したところ、"http_code"が404でも、$resultは"1"でした。 最後に改行を入れると見やすいかと思います。
TatsunoriKoda

2017/06/06 06:04

実行結果としては、 [url] => https://xxxx/xxx/xxxxx/xxxxxxxx/xxxxxxxx/xxxxxx [content_type] => text/html [http_code] => 404 [header_size] => 176 [request_size] => 212 [filetime] => -1 [ssl_verify_result] => 20 [redirect_count] => 0 [total_time] => 0.062 [namelookup_time] => 0.031 [connect_time] => 0.031 [pretransfer_time] => 0.062 [size_upload] => 17 [size_download] => 0 [speed_download] => 0 [speed_upload] => 274 [download_content_length] => -1 [upload_content_length] => 17 [starttransfer_time] => 0.062 [redirect_time] => 0 [redirect_url] => [primary_ip] => xx.xxx.xx.xx [certinfo] => Array ( ) [primary_port] => 443 [local_ip] => xxx.xx.xx.x [local_port] => 59728 となります。 $resultは空です。 真摯なご対応ありがとうございます。
TatsunoriKoda

2017/06/06 07:55

先方から連絡があり、 404が返ってくる原因は拡張メソッドでのリクエストができていないためとなります。 DELETEおよびPUTについては 拡張メソッドにて指定していただく必要がございます。 とありました。 拡張メソッドとはどのように指定するのでしょうか?
TatsunoriKoda

2017/06/06 08:47

最終的には以下のように修正することでいけました。 curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE'); ↓ curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); あくまでPOST送信の拡張という定義にしないといけないようです。 まだよく理解できていませんが、とりあえず解決できました。 度々、真摯なご対応ありがとうございました。

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.02%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

cURL

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

DELETE

ファイルシステムからファイル、データベースからレコードを削除することまたはメモリ内のオブジェクトの割り当てを取り消すことをさします。もしくは、HTTPプロトコルのDELETEを指すこともあります。

REST

REST(Representational State Transfer)はwebアプリケーションの構築スタイルの一種です。HTTP GET/POSTによってリクエストを送信し、レスポンスはXMLで返されます。SOAPのようなRPCの構築と比べるとサーバからクライアントを分離することが出来る為、人気です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。