2009-02-02 3 views
3

я делаю в HTTP POST, с помощью CurlCurl изменяющие URL после POST

$url = "http://localhost:8080/~demo/cgi-bin/execute/100"; 

//open connection 
$ch = curl_init(); 

//set the url, number of POST vars, POST data 
curl_setopt($ch,CURLOPT_URL,$url); 
curl_setopt($ch,CURLOPT_POST,count($data)); 
curl_setopt($ch,CURLOPT_POSTFIELDS,$data); 

//execute post 
$result = curl_exec($ch); 
echo("$result"); 
//close connection 
curl_close($ch); 

Пост запускается на выполнение, но ответ отображается с ошибкой:

The requested URL /~demo/100 was not found on this server.


выше URL, очевидно, не существует, а не сервера, потому что (каким-то образом) cURL изменил URL.

Должно быть /~demo/cgi-bin/execute/100. Этот URL-адрес работает в браузере.

Скажите, пожалуйста, почему это так? И как я могу остановить это, за что хочу?

+0

Предположительно, если вы попытаетесь посетить http: // localhost: 8080/~ demo/cgi-bin/execute/100 в окне браузера, это работает? –

+0

Да, кстати, да. –

+0

throw print_r (curl_getinfo ($ ch)); после curl_exec(), чтобы узнать, что вы получили. – Uberfuzzy

ответ

0

Это может быть не cURL, который меняет URL-адрес, а скорее то, что веб-сервер отправляет заголовок перенаправления в cURL, указывая на другое место. Возможно, следующее поможет:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); 
+0

Просто попробовал! :(Это не сработало –

+0

Вы пытались посетить URL-адрес своего браузера? –

+0

Да. Http: // localhost: 8080/~ demo/cgi-bin/execute/100 работает в браузере, но этот метод не работает, t просит об этом. –

2
  • Установите Фидлер.
  • Включить отладку.
  • Посетите сайт в браузере.
  • Выполнение кода php cURL.

Fiddler сообщит вам, что именно получает и отправляет веб-сервер. поскольку вы работаете локально, вы можете точно видеть, что именно отправляет php. Сравните два, и это скажет вам проблему.

1

Возможно, cURL пытается получить доступ к порту HTTP по умолчанию 80? Попытайтесь использовать