HEAD isteği sorunlara çözüm

1 Cevap php

Ben bir arama sunucuya müşteri verilerini göndermek için bir senaryo üzerinde çalışıyoruz. Ben bir süre önce bu konuda benzer bir sorun yolladı ama sonunda bazı yanıtları almak mümkün oldu. Ancak, başka bir sorunla karşı karşıya duyuyorum.

Benim localhost sunucudan komut sınarken, veri başarıyla gönderildi ediliyor ve ben bir 200 OK http yanıt alabilirsiniz. Ben curl_info bilgilerini kontrol benim localhost sunucu, request_header POST kullanılmış olduğunu göstermektedir.

Ben başka bir sunucuda aynı komut sınarken, hiçbir yanıt iade alır. HTTP_CODE ancak belirtir ve yetki sorunu olan 401 göstermektedir. Request_header ancak KAFA.

Şimdi herkes yerine POST kullanmak saniye sunucuyu zorlamak için bir yol olup olmadığını request_headers arasında böyle bir fark var neden beni anlamaya yardımcı olabilir. Ben bu sunucu KAFA istekleri ile ilgili bir sorun olduğu hissine olsun.

Ben kullanıyorum bu komut:

$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);

Teşekkürler

James

1 Cevap

Istemci ve sunucu arasında bir proxy veya önbellek var - HEAD istekleri genellikle proxy veya önbellek önbelleğe alınmış içeriği hala içeriği yenilemek için bir GET vermeden önce geçerli olup olmadığını kontrol sonucudur? Ben herhangi bir anlam ifade etmiyor çünkü POST önce kullanılması gereken beklemek olmaz.

Ben denemek ve köken aldıkları tam olarak istekleri ve yanıtları dizisini ve iz Wireshark'ı veya benzer kullanırsınız.

Another altenerative is a simple proxy that dumps the HTTP traffic, first result in Google is this one (not used it myself): http://www.fiddler2.com/fiddler2/