本文目錄一覽:
- 1、如何判斷php中curl模擬登陸是否成功
- 2、PHP curl超時設置的時間單位是1秒嗎
- 3、請教用Curl 在php 裡面模擬表單提交 文本+文件的寫法
- 4、PHP curl超時設置的時間單位是1秒嗎?為什麼我的程序顯示的是7秒
如何判斷php中curl模擬登陸是否成功
/**
* 模擬登錄
*/
//初始化變量
$cookie_file = “tmp.cookie”;
$login_url = “”;
$verify_code_url = “”;
echo “正在獲取COOKIE…\n”;
$curlj = curl_init();
$timeout = 5;
curl_setopt($curl, CURLOPT_URL, $login_url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($curl,CURLOPT_COOKIEJAR,$cookie_file); //獲取COOKIE並存儲
$contents = curl_exec($curl);
curl_close($curl);
echo “COOKIE獲取完成,正在取驗證碼…\n”;
//取出驗證碼
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $verify_code_url);
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$img = curl_exec($curl);
curl_close($curl);
$fp = fopen(“verifyCode.jpg”,”w”);
fwrite($fp,$img);
fclose($fp);
echo “驗證碼取出完成,正在休眠,20秒內請把驗證碼填入code.txt並保存\n”;
//停止運行20秒
sleep(20);
echo “休眠完成,開始取驗證碼…\n”;
$code = file_get_contents(“code.txt”);
echo “驗證碼成功取出:$code\n”;
echo “正在準備模擬登錄…\n”;
$post = “username=mabenpwd=hahahahaverifycode=$code”;
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER,1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file);
$result=curl_exec($curl);
curl_close($curl);
//這一塊根據自己抓包獲取到的網站上的數據來做判斷
if(substr_count($result,”登錄成功”)){
echo “登錄成功\n”;
}else{
echo “登錄失敗\n”;
exit;
}
PHP curl超時設置的時間單位是1秒嗎
設置curl的超時時間 CURLOPT_TIMEOUT 為1 (最小為1),因此客戶端需要等待1秒
請教用Curl 在php 裡面模擬表單提交 文本+文件的寫法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
public function curl($url, $postFields = null)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FAILONERROR, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
if ($this-readTimeout) {
curl_setopt($ch, CURLOPT_TIMEOUT, $this-readTimeout);
}
if ($this-connectTimeout) {
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $this-connectTimeout);
}
//https 請求
if(strlen($url) 5 strtolower(substr($url,0,5)) == “https” ) {
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
}
if (is_array($postFields) 0 count($postFields))
{
$postBodyString = “”;
$postMultipart = false;
foreach ($postFields as $k = $v)
{
if(“@” != substr($v, 0, 1))//判斷是不是文件上傳
{
$postBodyString .= “$k=” . urlencode($v) . “”;
}
else//文件上傳用multipart/form-data,否則用www-form-urlencoded
{
$postMultipart = true;
}
}
PHP curl超時設置的時間單位是1秒嗎?為什麼我的程序顯示的是7秒
瀉藥
PHP CURL超時設置分兩種,毫秒跟秒都是可以的。
curl普通秒級超時:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEOUT,60); //只需要設置一個秒的數量就可以
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_USERAGENT, $defined_vars[‘HTTP_USER_AGENT’]);
curl普通秒級超時使用:
curl_setopt($ch, CURLOPT_TIMEOUT,60);
curl如果需要進行毫秒超時,需要增加:
curl_easy_setopt(curl, CURLOPT_NOSIGNAL,1L);
//或者
curl_setopt ( $ch, CURLOPT_NOSIGNAL,true);//支持毫秒級別超時設置
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/195506.html