我一直致力于将客户数据发布到拨号服务器的脚本。我刚刚发布了一个类似的问题,但终于能够得到一些回应。但是,我正面临另一个问题。
当我从本地主机服务器测试脚本时,数据正在成功发送,我得到200 OK的http响应。从我的localhost服务器,当我检查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> </p>";
var_dump($headers);
curl_close($ch);
由于
詹姆斯
答案 0 :(得分:0)
我会尝试使用此选项
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
作为解决方法,您可以考虑使用CURLOPT_CUSTOMREQUEST
选项。
答案 1 :(得分:0)
HEAD请求通常是代理或缓存检查的结果,如果缓存内容在发出GET以刷新内容之前仍然有效 - 客户端和服务器之间是否有代理或缓存?我不希望它在POST之前使用,因为它没有任何意义。
我会尝试使用Wireshark或类似方法来准确跟踪请求和响应的顺序以及它们的来源。
另一个替代方案是转储HTTP流量的简单代理,谷歌的第一个结果就是这个(我自己没用过): http://www.fiddler2.com/fiddler2/