2017-01-18 13 views
0

私はcurlでapiをリクエストしていますが、私は常に404応答しています。私がPhpStormによって同じリクエストを行うと、私の要求は正しく機能します。私はカールのようにレストクライアントに同じヘッダーを設定しました。私は間違っていますか?以下は私のPHPコードと残りのクライアント構成最初php curlではapiが動作しませんがPhpStorm Rest Clientで動作します。

$postfields = array(
     'SUBSCRIPTION'     => 'testlist', 
     "HTTP_REDIRECT"     => 'https://testsite.com', 
     "HTTP_REDIRECT_ERROR"   => 'https://testsite.com/error', 
     "email"       => '[email protected]', 
     "Sprache"      => 'DE' 
    ); 


    $uri = $uri . '?=' . http_build_query($postfields); // value of uri is http://web.mailingsystem.com/subscription/servlet?=SUBSCRIPTION=testlist&HTTP_REDIRECT=https%3A%2F%2Ftestsite.com%2F&HTTP_REDIRECT_ERROR=https%3A%2F%2Ftestsite.com%2Ferror&email=test%2B100A%40gmail.com&Sprache=DE 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $uri); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_VERBOSE, 1); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 60); 
    curl_setopt($ch, CURLOPT_ENCODING, ""); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
    curl_setopt($ch, CURLOPT_MAXREDIRS, 1); 
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible;from testshop;os:".PHP_OS.";)"); 
    curl_setopt($ch, CURLINFO_HEADER_OUT, true); 

    $headers = [ 
     'Content-Length:' 
    ]; 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 


    $content = curl_exec($ch); 
    $error = curl_error($ch); 
    $response = curl_getinfo($ch); 
    curl_close($ch); 

rest client configuration

答えて

0

オフのスクリーンショットである、あなたは不完全な「コンテンツ長」ヘッダを送信します。ほとんどの場合、ターゲットサーバーはこれを「content-length:0」として扱いますが、APIの開発者に連絡して修正するように指示すると、404 Not Foundレスポンスではなく400 Bad Requestレスポンスが返されます。そのため、正しい長さのヘッダーを持っています。これを行う最善の方法は、コンテンツ本体のヘッダーを挿入しないことです(リクエスト本体を持っているときに、カールが正しいものを生成する)。

、RestClientがmultipart/form-dataエンコーディングを使用しているようですあなたのカールコードにはリクエストボディが全くありません。データはGET URLにありますので、カールするとRestClientと一致します(curl_setopt($ch,CURLOPT_POSTFIELDS,http_build_query($postfields));のようなCURLOPT_POSTFIELDS)。そして、URLからデータを削除します。おそらくあなたのURLが不正な形式(データ本体を含む)であるため、404エラー

+0

があなたの助けになるでしょう。あなたの説明に従って両方のものを変更しなければなりませんでしたが、今は正しく動作します。 – Rudolf

関連する問題