【问题标题】:PHP cURL odd behaviourPHP cURL 奇怪的行为
【发布时间】: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() 超时错误

标签: php curl get timeout


【解决方案1】:

主机myaccount.comeconnect.com 似乎正在阻止来自非客户的连接。您很可能会收到错误,因为您不在允许连接的 IP 地址上,不幸的是,没有办法解决这个问题。

【讨论】:

  • 你是怎么检查的?我想确认一下
  • @kirpalsingh - 如果您想确认,可以发电子邮件或打电话给他们。我尝试了一些服务器,但无法从其中任何一个连接。它没有立即断开连接的事实似乎表明它已被防火墙保护。
  • 谢谢,我没有问他们,而是使用不同的 ISP 打开此站点,但都无法连接。它解释了所有奇怪的行为..
猜你喜欢
  • 2015-07-06
  • 1970-01-01
  • 2019-07-25
  • 1970-01-01
  • 1970-01-01
  • 2014-07-08
  • 2013-08-09
  • 2021-11-21
  • 2018-05-20
相关资源
最近更新 更多