【发布时间】:2011-07-02 10:00:45
【问题描述】:
我正在尝试解析一个页面,我必须首先使用用户名和密码登录该站点。所以我从一个 php cURL 脚本开始使用 GET 方法登录到页面,但问题是我每次都收到超时错误,不管我设置的超时时间有多长。
登录页面:http://myaccount.comeconnect.com/jsp/Login.jsp
cURL 中使用的 URL:http://myaccount.comeconnect.com/servlet/MyAccountLogin?loginMode=2&username=user&password=pass&QuickNavigation=Disabled
具有有效、用户和传递值。
现在,当我在浏览器中使用此 URL 时,我可以轻松登录。所以我对为什么会出现超时错误有点困惑。
PHP 代码不在同一台服务器上。
PHP 代码:
//创建要发布的数据数组 $post_data['loginMode'] = '2'; $post_data['username'] = $_GET['user']; $post_data['password'] = $_GET['pass']; $post_data['QuickNavigation'] = "禁用"; //遍历数组并准备要发布的数据(key1=value1) foreach ( $post_data as $key => $value) { $post_items[] = $key 。 '=' 。 $价值; } //使用 implode() 创建要发布的最终字符串 $post_string = implode ('&', $post_items);$user = $_GET['user'];
$pass = $_GET['pass'];
//create array of data to be posted
$post_data = array( 'loginMode' => '2',
'username' => $user,
'password' => $pass,
'QuickNavigation' => "Disabled");
//create the final string to be posted using implode()
$post_string = http_build_query($post_data, '', '&');
//Params for cURL
$ckfile = './cookie.txt';
$url = 'http://myaccount.comeconnect.com/servlet/MyAccountLogin?'.$post_string;
$timeout=10;
$userAgent= "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1";
//create cURL connection
$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT,$timeout);
curl_setopt ($ch, CURLOPT_COOKIEJAR, $ckfile);
$result = curl_exec($ch);
print_r(curl_getinfo($ch));
echo curl_errno($ch) . '-' .curl_error($ch);
curl_close($ch);
echo $result;
【问题讨论】:
-
http_build_query()是你的朋友 :) -
另外,为什么将 GET 参数存储在
$post_string中? -
你为什么不发布 POST 字符串?
-
我早些时候发布了帖子字符串,但我收到了同样的错误“超时”。因此,我尝试通过在浏览器中启动 URL 来检查 GET 是否有效,并且它有效,所以我想也许我应该使用 GET,但仍然出现“超时”错误
-
KK... 了解 http_build_query() .. 它只是我在这里做的花哨的方式,反正我用了它,仍然没有区别...仍然 28-connect() 超时错误