jolinnew 2015-08-17 05:20 采纳率: 0%
浏览 1788

curl 和 file_get_content 模拟登陆页面的问题

想请教一下各种大神们,我用file_get_content设置了UA就可以输出页面,可是用curl的话反而会报出所请求的资源被分配一个新的永久性的URI,百思不得其解,希望有人能帮下我..
PS:该页面是1688的登陆页面

$url="http://login.1688.com/member/signin.htm";

//可以输出

/* ini_set('user_agent','Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)');

echo file_get_contents($url) */;

//exit;

//输出为302 Found
//所请求的资源被分配一个新的永久性的URI
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
//curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)');
//curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$content = curl_exec($ch);
curl_close($ch);
echo $content;

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-04 05:38
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    你使用file_get_contents()curl来访问同一个URL,并尝试设置用户代理(User-Agent)。这似乎导致了两个不同的问题:

    1. file_get_contents():它试图以user-agent参数设置用户代理。然而,file_get_contents()默认情况下并不支持设置user-agent。你需要提供一个自定义的user-agent字符串。

    2. curl:它在执行curl_exec()之前就关闭了curl会话。这是因为在PHP中,当你调用curl_exec()时,它会立即返回结果并关闭连接。因此,即使你在curl_init()中打开了连接,curl_close()也会在curl_exec()之前被调用。

    解决方法:

    • $ch = curl_init();中的语句改为$ch = curl_init($url);
    • 设置$chCURLOPT_USERAGENT属性。例如:
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3');
    

    这样,file_get_contents()将能够正确地获取页面内容,而不会出现临时重定向。

    注意:如果你的服务器可能限制了HTTP请求的最大并发数或响应时间,或者你的服务器对POST请求有特定的限制,请确保在发送POST请求前添加适当的超时设置和重试策略。

    评论

报告相同问题?