Я пытаюсь использовать CURL PHP, чтобы сделать запрос GET на сервер, и у меня возникают некоторые трудности с этим. Когда я делаю запрос через PHP, мне возвращается ошибка 500 с внешнего сервера. Однако, если я делаю запрос, используя завихрение bash, или посещаю URL-адрес в браузере, он преуспевает.
Я урезал PHP до самых простых вещей:
$url = 'http://example.com:8080/path/to/service?cmd=my_command&arg=example2.com'; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_exec($ch); print_r(curl_getinfo($ch)); curl_close($ch);
Как указано, это возвращает ошибку 500 из example.com. Однако, если я сделаю следующее:
[me@host ~] curl "http://example.com:8080/path/to/service?cmd=my_command&arg=example2.com"
Я возвращаю ожидаемый XML-документ.
Что дает? Это должно быть что-то с кодировкой URL-адреса, как будто я разделяю $url
var на просто http://example.com:8080
запрос PHP CURL теперь отвечает на 200. Я пробовал заменить &
с %26
– это не сработало (и я не ожидаю этого, так как &
действительно в URL-адресе). Я попытался сделать то, что ответ на php curl посылает vars, используя GET wierd results , но это тоже не помогло.
Что мне здесь не хватает? Я уверен, что это нечто абсурдно простое, но это ускользает от меня.
Благодаря!
EDIT: Я только что попытался сделать это на Python – просто чтобы узнать, что произошло – и там все прекрасно работает:
import urllib2 r = urllib2.urlopen(theURL) r.read()