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

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

新規登録して質問してみよう
ただいま回答率
85.50%
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

解決済

1回答

5484閲覧

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

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はプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

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

投稿2017/06/06 03:22

Youichi256

総合スコア204

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

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送信の拡張という定義にしないといけないようです。 まだよく理解できていませんが、とりあえず解決できました。 度々、真摯なご対応ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問