2017-01-18 1 views
0

Я пытаюсь отправить запрос на отдых api с помощью curl, но у меня всегда есть ответ 404. Когда я делаю тот же запрос от PhpStorm, мой запрос работает правильно. Я устанавливал те же заголовки в клиенте отдыха, что и в curl. Что я делаю неправильно? Ниже мой PHP код и скриншот остальной конфигурации клиентаЗапрос на отдых api не работает php curl, но работает 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 и сообщить им, чтобы они исправили его, поэтому он возвращает ответ 400 Bad Request, а не ответ 404 Not Found, тогда вы должны исправить свою кода, поэтому он имеет правильный заголовок длины содержимого. лучший способ сделать это - не вставлять заголовок длины содержимого вообще, что заставляет curl генерировать правильный для вас (когда у вас есть тело запроса)

Во-вторых, ваш RestClient, по-видимому, использует кодировку multipart/form-data , но ваш curl-код вообще не имеет тела запроса, данные находятся в URL-адресе GET, исправить это, поэтому завиток соответствует вещи RestClient, с CURLOPT_POSTFIELDS, например curl_setopt($ch,CURLOPT_POSTFIELDS,http_build_query($postfields));, и удалите данные с URL-адреса. вероятно, потому, что ваш url некорректен (содержит тело сообщений), что вы получаете ошибку 404

+0

thx за вашу помощь. Мне пришлось изменить обе вещи в соответствии с вашим описанием, и теперь она работает правильно. – Rudolf

Смежные вопросы