当前位置:首页 » 编程语言 » php模拟https请求

php模拟https请求

发布时间: 2022-06-11 17:05:29

‘壹’ php模拟http请求并无条件结束请求,可以是get方式的http请求,但是我想在请求1秒后结束请

$ch=curl_init("http://www.domain.com/api/index.php?test=1");
curl_setopt($ch,CURLOPT_TIMEOUT,1);//超时设置,秒级毫秒级CURLOPT_TIMEOUT_MS
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);//获取数据返回
curl_setopt($ch,CURLOPT_BINARYTRANSFER,true);//在启用CURLOPT_RETURNTRANSFER时候将获取数据返回
echo$output=curl_exec($ch);

‘贰’ 对于https协议的网站,可以用php 的curl来模拟get请求和post请求吗,能得到返回值吗

可以。
CURLOPT_PROTOCOLS
CURLPROTO_* 的位域指。如果被启用,位域值会限定libcurl在传输过程中有哪些可使用的协议。这将允许你在编译libcurl时支持众多协议,但是限制只是用它们中被允许使用的一个子集。默认libcurl将会使用全部它支持的协议。参见 CURLOPT_REDIR_PROTOCOLS .
可用的协议选项为:CURLPROTO_HTTP、CURLPROTO_HTTPS、CURLPROTO_FTP、CURLPROTO_FTPS、CURLPROTO_SCP、CURLPROTO_SFTP、CURLPROTO_TELNET、CURLPROTO_LDAP、CURLPROTO_LDAPS、CURLPROTO_DICT、CURLPROTO_FILE、CURLPROTO_TFTP、CURLPROTO_ALL

对了,可定能得到返回值

‘叁’ php程序员用PHP如何实现https方式访问

SSL证书安装到服务器环境里面安装的,不是安装到语言编程语言的。
一、如果程序员要实现,具备一台独立服务器或云服务器
二、确定好需要实现HTTPS方式的域名(网址)。
三、登陆淘宝搜索:Gworg 获取SSL证书,办理认证手续。
四、拿到证书安装到服务器就可以了,不会安装建议让签发机构安装。

‘肆’ php如何模拟浏览器行为

// 用户名
$login = ‘username’;
//密码
$password = ‘password’;
//163的用户登陆地址
$url = “https://reg.163.com/logins.jsp”;
//post 要提交的数据
$fields = “verifycookie=1&style=16&proct=mail163&username=”.$login.”&password=”.$password.”&selType=jy&remUser=&secure=on&%B5%C7%C2%BC%D3%CA%CF%E4=%B5%C7%C2%BC%D3%CA%CF%E4″;
// 用来存放cookie的文件
$cookie_file = dirname(__FILE__).”/cookie.txt”;
// 启动一个CURL会话
$ch = curl_init();
// 要访问的地址
curl_setopt($ch, CURLOPT_URL, $url);
// 对认证证书来源的检查,0表示阻止对证书的合法性的检查。
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
// 从证书中检查SSL加密算法是否存在
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1);
//模拟用户使用的浏览器,在HTTP请求中包含一个”user-agent”头的字符串。
curl_setopt($ch, CURLOPT_USERAGENT, “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)”);
// 发送一个常规的POST请求,类型为:application/x-www-form-urlencoded,就像表单提交的一样。
curl_setopt($ch, CURLOPT_POST, 1);
//要传送的所有数据,如果要传送一个文件,需要一个@开头的文件名
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
//连接关闭以后,存放cookie信息的文件名称
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
// 包含cookie信息的文件名称,这个cookie文件可以是Netscape格式或者HTTP风格的header信息。
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
// 设置curl允许执行的最长秒数
//curl_setopt($ch, CURLOPT_TIMEOUT, 6);
// 获取的信息以文件流的形式返回,而不是直接输出。
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
// 执行操作
$result = curl_exec($ch);
if ($result == NULL) {
echo “Error:
“;
echo curl_errno($ch) . ” – ” . curl_error($ch) . ”
“;
}
// 关闭CURL会话
curl_close($ch);
上面这个例子相对简单,因为用户名和密码可以明文传输,而且登陆也不需要验证码。qq.com的模拟登陆相对就麻烦多了,首先要突破验证码这关,然后由于 QQ密码是经过javascript加密后传输的,登陆界面也要模拟出来,下一篇文章再继续深入谈谈QQ的模拟登陆。

‘伍’ 在PHP中如何伪造http头进行模拟登陆

用php模拟登陆主要分为三部分 1. post数据。 2.根据返回的http头,从中截出cookie段。 3.伪造http头发送请求。 我这里以用php抓取163相册的需要密码才能访问的目录为例。 <?php function posttohost($url, $data) //post数据 { $url = parse_url($url); if (!$url) return "couldn't parse url"; if (!isset($url['port'])) { $url['port'] = ""; } if (!isset($url['query'])) { $url['query'] = ""; } $encoded = ""; foreach ($data as $k=>$v) { $encoded .= ($encoded ? "&" : ""); $encoded .= rawurlencode($k)."=".rawurlencode($v); } $fp = fsockopen($url['host'], $url['port'] ? $url['port'] : 80); if (!$fp) return "Failed to open socket to $url[host]"; fputs($fp, sprintf("POST %s%s%s HTTP/1.0\n", $url['path'], $url['query'] ? "?" : "", $url['query'])); fputs($fp, "Host: $url[host]\n"); fputs($fp, "Content-type: application/x-www-form-urlencoded\n"); fputs($fp, "Content-length: " . strlen($encoded) . "\n"); fputs($fp, "Connection: close\n\n"); fputs($fp, "$encoded\n"); $line = fgets($fp,1024); if (!eregi("^HTTP/1\.. 200", $line)) return; $results = ""; $inheader = 1; while(!feof($fp)) { $line = fgets($fp,1024); if ($inheader && ($line == "\n" || $line == "\r\n")) { $inheader = 0; } elseif ($inheader) { $results .= $line; } } fclose($fp); return $results; }

‘陆’ 如何通过php的curl模拟ajax请求,获取其返回值

这个需要配合js,打开一个html页面,首先js用ajax请求页面,返回第一个页面信息确定处理完毕(ajax有强制同步功能),ajax再访问第二个页面。(或者根据服务器状况,你可以同时提交几个URL,跑几个相同的页面)
参数可以由js产生并传递url,php后台页面根据URL抓页面。然后ajax通过php,在数据库或者是哪里设一个标量,标明检测到哪里。由于前台的html页面执行多少时候都没问题,这样php的内存限制和执行时间限制就解决了。
因为不会浪费大量的资源用一个页面来跑一个瞬间500次的for循环了。(你的500次for循环死了原因可能是获取的数据太多,大过了php限制的内存)
不过印象中curl好像也有强制同步的选项,就是等待一个抓取后再执行下一步。但是这个500次都是用一个页面线程处理,也就是说肯定会远远大于30秒的默认执行时间。

‘柒’ 请教用Curl 在php 里面模拟表单提交 文本+文件的写法


publicfunctioncurl($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($postFieldsas$k=>$v)
{
if("@"!=substr($v,0,1))//判断是不是文件上传
{
$postBodyString.="$k=".urlencode($v)."&";
}
else//文件上传用multipart/form-data,否则用www-form-urlencoded
{
$postMultipart=true;
}
}
unset($k,$v);
curl_setopt($ch,CURLOPT_POST,true);
if($postMultipart)
{
foreach($postFieldsas$k=>$v){
if("@"==substr($v,0,1)){
$tempffile=preg_replace('/^@/','',$v);
$advfield[$k]=newCURLFile($tempffile);
}else{
$advfield[$k]=$v;
}
}

curl_setopt($ch,CURLOPT_POSTFIELDS,$advfield);
unset($k,$v,$advfield);
//curl_setopt($ch,CURLOPT_POSTFIELDS,$postFields);//田村改
//curl_setopt($ch,CURLOPT_POSTFIELDS,['file'=>newCURLFile(realpath('image.png'))]);
}
else
{
curl_setopt($ch,CURLOPT_POSTFIELDS,substr($postBodyString,0,-1));
}
}
$reponse=curl_exec($ch);

if(curl_errno($ch))
{
thrownewException(curl_error($ch),0);
}
else
{
$httpStatusCode=curl_getinfo($ch,CURLINFO_HTTP_CODE);
if(200!==$httpStatusCode)
{
thrownewException($reponse,$httpStatusCode);
}
}
curl_close($ch);
return$reponse;
}

表单列表是 $postFields 传入参数

数组,如果有文件 ,就在数组的值 前面加@

已经做好的 集成类 的实现 其他类字段和方法没给出,写不下了。

但是大致的实现过程应该可以看懂了

‘捌’ PHP模拟HTTP的POST请求时遇到的问题求助

类中 静态方法和静态属性的引用方法例如class Test{ public static $test = 1; public static function test(){ }}可以不用实例化对象直接使用 Test::$test 来取得$test属性的值静态方法调用也同理Test::test(); 直接调用静态方法test

如果我解答楼主觉得不清楚可以自己去后盾人学习,对你学习PHP应该会有帮助,

热点内容
bin存储 发布:2025-02-07 20:00:50 浏览:202
android加载界面 发布:2025-02-07 19:55:28 浏览:870
好矿云服务器 发布:2025-02-07 19:54:31 浏览:948
java电话簿 发布:2025-02-07 19:49:26 浏览:796
超级脚本制作 发布:2025-02-07 19:31:30 浏览:486
怎么查看支付宝的账号密码 发布:2025-02-07 19:26:48 浏览:16
惠普服务器查看ip指令 发布:2025-02-07 19:26:47 浏览:434
算法设计模式 发布:2025-02-07 19:15:52 浏览:746
服务器1u能连接几台电脑 发布:2025-02-07 18:50:02 浏览:154
立人编译 发布:2025-02-07 18:48:32 浏览:766