2009-12-29 3 views
0

Я работаю над сценарием для отправки данных клиента на сервер набора номера. Я опубликовал аналогичную проблему об этом некоторое время назад, но, наконец, смог получить ответы. Однако я столкнулся с другой проблемой.Решение проблем с запросом HEAD

Когда я тестирую скрипт с моего локального хост-сервера, данные отправляются успешно, и я получаю ответ 200 OK http. С моего локального сервера, когда я проверяю детали curl_info, request_header показывает, что POST был использован.

Когда я тестирую один и тот же сценарий на другом сервере, ответ не возвращается. Однако HTTP_CODE показывает 401, который указывает и указывает на авторизацию. Однако request_header является HEAD.

Теперь может кто-нибудь помочь мне выяснить, почему существует такая разница между request_headers и если есть способ заставить сервер секунд использовать POST. Поскольку у меня возникает ощущение, что этот сервер имеет проблемы с запросами HEAD.

Это сценарий, который я использую:

$full_url = $_GET['url'] . urlencode($_GET['attrib']); 

$loginUsername = "123456"; 
$loginPassword = "123456"; 

$unencriptedString = $loginUsername.":".$loginPassword; 
$encryptedString = base64_encode($unencriptedString); 


$headers   = array("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", 
         "Accept-Language: en-gb", 
         "Accept-Encoding: gzip,deflate", 
         "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7", 
         "Keep-Alive: 300", 
         "Connection: keep-alive", 
         "Content-type: application/x-www-form-urlencoded;charset=UTF-8", 
         "Content-length: " . strlen($_GET['attrib']), 
         "Transfer-Encoding: chunked", 
         $_GET['attrib'], 
         ); 

$user_agent  = "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.5)";        
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); # required for https urls 
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent); 
curl_setopt($ch, CURLOPT_URL, $_GET['url']); 
curl_setopt($ch, CURLOPT_USERPWD, "$loginUsername:$loginPassword"); //login 
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $_GET['attrib']); 
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); 
// curl_setopt($ch, CURLOPT_TIMEOUT, 10); 
curl_setopt($ch, CURLINFO_HEADER_OUT, 1); 
curl_setopt($ch, CURLOPT_VERBOSE, 1); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 

$response = curl_exec($ch); 
if (!$response) { 
    $response = curl_error($ch); 
} 
echo "<p>" . $response . "</p>"; 

$info = curl_getinfo($ch); 

if (curl_error($ch)) { 
    echo "ERROR ". curl_error($ch) ."\n<br/>"; 
} else { 
    print "<pre>"; 
    print_r($info); 
    print "</pre>"; 
} 

echo "<p>&nbsp;</p>"; 

var_dump($headers); 

curl_close($ch); 

Благодаря

Джеймс

+0

Я считаю, что вы получаете «голова была использована», потому что вы посылаете HEAD перед GET/POST. Таким образом, поскольку вам дали 401, POST/GET никогда не обсуждались. Если это так, как только вы выясните свою проблему с auth, вам должно быть хорошо идти. Тем не менее. –

+0

Странно, что у меня нет никаких проблем на моем локальном сервере с этим скриптом, но в другом месте есть большая проблема. – James

ответ

0

Я хотел бы попробовать использовать эту опцию curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);

В качестве временного решения вы можете рассмотреть возможность использования CURLOPT_CUSTOMREQUEST варианта ,

0

Запросы HEAD обычно являются результатом проверки прокси-сервера или кеша, если кешированный контент все еще действителен до выдачи GET для обновления содержимого. Существует ли прокси-сервер или кеш между клиентом и сервером? Я бы не ожидал, что он будет использоваться до POST, потому что это не имеет никакого смысла.

Я бы попытался использовать Wireshark или аналогично отслеживать последовательность запросов и ответов и откуда они происходят.

Другой altenerative простой прокси-сервер, который выводит HTTP-трафик, первый результат в Google это один (не использовал его сам): http://www.fiddler2.com/fiddler2/

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