2017-02-21 13 views
1

投稿リクエストを送信していません。私はなぜ、あるいは私が間違っているのかはわかりません。モデレーターによって追加されましたPHP Curl投稿要求が機能していない投稿がありません

 //servapi added to code for clarity 
     $servapi = "https://(hidingwebsiteforthispost).com/api.php?key=(my_key)&service=31&action=order&profile=[link]&amount=[amount]" 

     //original code 
     $arrayFind = array(
      '[link]', 
      '[amount]' 
     ); 
     $arrayReplace = array(
      $link, 
      $quanity 
     ); 
     $APILink  = $servapi; 
     $APILink  = str_replace($arrayFind, $arrayReplace, $APILink); 
     $ch   = curl_init(); 
     curl_setopt($ch, CURLOPT_URL, $APILink); 
     curl_setopt($ch, CURLOPT_HEADER, 0); 
     curl_setopt($ch, CURLOPT_NOSIGNAL, 1); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt($ch, CURLOPT_TIMEOUT, 3); 
     curl_exec($ch); 
     curl_close($ch); 

これは、データベースのAPIである

ユーザーは、POSTリクエストが送信先サーバー上の自分のアカウントを見直すことで成功しているかどうかを検証しています。成功すると、彼のアカウントの下で新しい注文が開始されます。 requestmaker.comのAPI文字列を使用すると、新しい注文が作成されますが、上記のコードを実行すると新しい注文は作成されません。

var_dumpを使用して返されたパケットをcurl_exec($ch)から検査する場合、ユーザーは応答が空であると示します。

また、ユーザーはCURLOPT_POSTをtrueに設定するコードを更新しました。

+0

あなたの質問にお答えする人々を助けるために、いくつかの詳細を追加してください。 curl_exec()関数がAPIにデータを送信していないことをどのように知っていますか?あなたはサーバーからのログを持っていますか?あなたがコードが動作していると思われる理由、または動作していないと思われる理由について、あなたが提供したすべての情報は、あなたが試したことやまだ試していないことを理解するのに役立ちます。 –

+0

私はAPIを所有していませんが、requestmaker.comでリクエストをテストしたところ正常でした。しかし、私は私のサーバー上で要求を送信するために行く何も起こりません。 –

+0

したがって、リクエストはターゲットサイトで表示される変更を行う必要があり、期待していた変更が表示されない別の方法でそのサイトを表示すると言います。これは正しいです? –

答えて

1

あなたが実際にPOSTリクエストをやっていない、あなたはPOSTリクエストを送信するために、

curl_setopt($ch, CURLOPT_POST, true); 

を追加したいと思うでしょう。

詳細については、curl documentationと具体的にはcurl_setopt documentationを参照してください。

+0

まだ動作しませんでした:/ –

+0

正確には機能しませんでしたか?この変更後の結果を指定してください。 – nvisser

+0

何も変わっていませんでした。私はapiを持っていない/所有していないので、私はそのログを持っていません。私は要求を送信している私のサーバー上で特定のエラーを受け取りません。リクエストが送信されたときには何も起こりません。 –

1

@ nvisserの提案に加えて、カール要求からの応答もキャプチャして確認する必要があります。次のようにあなたのcurl_execを変更する:あなたはTRUEにCURLOPT_RETURNTRANSFERを設定しているので

$response = curl_exec($ch); 

は、あなたのcurl_execは文字列としてすべての応答をカプセル化し、お好みの変数に返します。

応答を出力すると、問題の診断に役立つ情報が表示されます。コメントでの議論の後に追加されました

:ここ

は、私たちが何をすべきかです:

あなたがネットワーク経由でコントロールを持っていないので、ので、あなたの仮想プライベートサーバー上のWebサーバーをインストールし、活性化してみてくださいhttp://localhost/fakeServer.php

Apache2またはNGINXをインストールしてセットアップしたら、そのWebディレクトリのルートにfakeServer.phpという小さなプログラムを作成し、API URLをに設定してください210。そのスクリプト内で、スクリプトが実行されるたびに$_POSTヘッダーの内容を出力するログを作成します。

このようにして、スクリプトが要求を受信側サーバーに送信しているかどうかを証明することができます。これにより、APIクラスを使用するようにスクリプトをデバッグし、コードが正しくフォーマットされ、正しく動作することを確認するのに役立ちます。

fakeServer.phpは応答を出力し、プログラムでその応答を確認しましたか?すべて正常に機能している場合、fakeServer.phpの出力は$response変数になります。

すべてがうまくいかない場合は、問題を見つけるためにテスト環境をより詳細に制御できます。

+0

応答がありません。 –

+0

応答がないということは、インターネットパケットがリモートサーバーに送信されないことを示唆しています。別のサーバーでコードをテストしていて、コードがそのサーバーによって検証されている場合は、異なるものを分解する必要があります。 requestmaker.comでPHPを検証したため、PHPが正しいとみなすことができます。それからあなたのサーバーとそれが座っているネットワークについて考えてみましょう。ファイアウォールがあなたのアウトバウンドリクエストをブロックしている可能性がありますか?このような場合は、ファイアウォールを通過する方法が見つかるまで、要求は決して出されません。 –

+0

あなたのインターネットパケットが作成から破壊に至るまでの完全な経路を考え、それがrequestmaker.comで作成されたインターネットパケットとどのように違うのか考えてみてください。 –

関連する問題