2015-01-06 2 views
0

Я столкнулся с очень странной ситуацией. Выполнение запроса в Postman для веб-службы работает правильно (x-www-form-urlencoded) с несколькими параметрами.Запрос PHP cURL не работает, но работает с Postman/curl из Bash

Однако, когда я делаю этот запрос с помощью PHP CURL запрос не с ответом, аналогичным образом:

Failed to Connect, fopen(http://10.0.0.8:8080/posts?foo=bar&bar=baz): failed to open stream: HTTP request failed! 

Веб-сервис, кажется, написаны с использованием PHP, конечная точка такая, как http://foo.com/service.php.

Почтальон будет работать 100% времени, запрос cURL, сделанный от Bash, работает в 100% случаев.

Для меня крайне странно, что он пытается разрешить внутренний IP-адрес и что он только терпит неудачу при использовании библиотеки php cURL.

Надеюсь, кто-то может пролить свет на это или испытал это раньше. Я пробовал почти все варианты завитки, которые можно было бы заставить работать, но не повезло. Любая помощь будет оценена по достоинству.

Код:

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, self::SERVICE_ENDPOINT); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $paramString); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch, CURLOPT_HEADER, true); 
curl_setopt($ch, CURLOPT_FAILONERROR, false); 

var_dump(curl_exec($ch)); 
die; 

Многословный выход:

HTTP/1.1 200 OK 
Date: Tue, 06 Jan 2015 09:27:20 GMT 
Server: Apache 
Expires: Thu, 19 Nov 1981 08:52:00 GMT 
Last-Modified: Tue, 06 Jan 2015 09:27:20 GMT 
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
Pragma: no-cache 
Vary: Accept-Encoding 
Content-Length: 324 
Content-Type: text/html 

Failed to Connect, fopen(http://10.0.0.8:8080/posts?foo=bar&bar=baz): failed to open stream: HTTP request failed! 
+0

Есть некоторые вещи, которые вы можете отправить с запросом на завивку, чтобы отладить то, что на самом деле происходит, попробуйте заменить это на свой 'curl_exec()': 'curl_setopt (CURLOPT_HEADER, true); curl_setopt (CURLOPT_FAILONERROR, FALSE); var_dump (curl_exec()); die; ' –

+0

Вы использовали какой-либо прокси? – Priyank

+0

Я не пользуюсь прокси-сервером. Добавлена ​​отладочная информация в исходное сообщение. – user3135639

ответ

1

Завиток команда ОК, но код на удаленном сервере пытается загрузить какой-либо файл, используя fopen. Это не удается, и сообщение об ошибке возвращается как часть ответа на ваш код вызова. Похоже, что удаленный код пытается открыть URL-адрес на основе некоторого ввода, который он получает от клиента; что вход от вашей команды curl отличается от ввода Postman. Чтобы выяснить, какой именно элемент в заголовках HTTP или POST-контенте является виновником, вам нужно заглянуть в код удаленного сервера (service.php) или выполнить пробную ошибку, сравнив точное содержимое запроса почтмана с запрос CURL.

+0

Спасибо. Не могу поверить, что я не обратил на это внимания. Оказывается, причиной этого является параметр, заданный логическим значением true. Исправлена ​​проблема с изменением строки. Еще раз спасибо! – user3135639

+0

Не могли бы вы указать, какой параметр он был? Я столкнулся с такой же ошибкой, но все еще не в состоянии понять. Это код, который я использую: $ data2 = 'redirect_uri = xxxmyredirecturixxx & client_id = xxxxmyclientidxxx & client_secret = xxxxmyclientsecretxxxxx & refresh_token = xxxrefreshtokenofmyaccountxxx & type = refresh'; curl_setopt ($ ch, CURLOPT_URL, 'https://launchpad.37signals.com/authorization/token'); curl_setopt ($ ch, CURLOPT_POST, true); curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, true); curl_setopt ($ ch, CURLOPT_VERBOSE, true); curl_setopt ($ ch, CURLOPT_POSTFIELDS, $ data2); –

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