客户端URL库

添加注释

用户贡献的笔记32条注释

弗兰克在interactinet.com
13年前
我写了以下内容,看看提交的URL是否有有效的http响应代码,以及它是否快速响应。

这样使用代码:

<?php程序
$is_ok(_O)
=http_响应($网址);//仅当http响应代码<400时返回true
?>

第二个参数是可选的,它允许您检查特定的响应代码

<?php程序
http_响应
($网址,'400');//如果http状态为400,则返回true
?>

第三个选项允许您指定等待响应的时间。

<?php程序
http_响应
($网址,'200',);//如果响应时间少于3秒且响应代码为200,则返回true
?>

<?php程序
功能http_响应($网址,$状态=无效的,$等待=)
{
$时间=微时间(真的);
$过期=$时间+$等待

//我们分叉进程,这样就不必等待超时
$pid=pcntl叉();
如果(
$pid== -1) {
模具(
'无法分叉');
}否则,如果(
$pid) {
//我们是父母
美元ch=卷曲_ init();
当前设置选项(美元ch,曲线_ URL,$网址);
卷曲_顶点(美元ch,CURLOPT_HEADER(光标_页眉),真的);
卷曲_顶点(美元ch,CURLOPT_无人,真的);//拆卸车身
卷曲_顶点(美元ch,CURLOPT_返回传输,真的);
$头=卷曲_执行(美元ch);
$httpCode(美元httpCode)=curl_getinfo(卷发信息)(美元ch,CURLINFO_HTTP_代码);
curl_close(卷曲_闭合)(美元ch);

如果(!
$头)
{
返回
错误的
}

如果(
$状态===无效的)
{
如果(
$httpCode(美元httpCode)<400)
{
返回
真的
}
其他的
{
返回
错误的
}
}
埃尔塞夫(
$状态==$httpCode(美元httpCode))
{
返回
真的
}

返回
错误的
pcntl等待($状态);//防止僵尸儿童
}其他{
//我们是孩子
同时(微时间(真的) <$过期)
{
睡觉(0.5);
}
返回
错误的
}
}
?>

希望这个例子能有所帮助。它没有经过100%的测试,所以任何反馈(通过电子邮件直接发送给我)都非常感谢。
gmail@asmqb7
8年前
警告

在此示例中:http://php.net/manual/en/book.curl.php#102885作者:“frank at interactiinet dot com”

里面有个小虫子

<?php程序

...

埃尔塞夫(
$状态==$httpCode(美元httpCode))
{
返回
真的
}

返回
错误的
pcntl等待($状态);//防止僵尸儿童
}其他{
//我们是孩子
同时(微时间(真的) <$过期)

...

?>

代码会立即将函数留在“return”处,并且在任何情况下都不会执行pcntl_wait()。

然而,我看不到这个功能有任何其他问题。
iname dot com上的artax_N_O_S_P_A_M_erxes2
13年前
我需要在php脚本中使用cURL来下载数据,不仅使用SSL进行服务器身份验证,还使用SSL进行客户端身份验证。
在默认安装Fedora时,如果设置正确的cURL参数,我会收到一个错误:

$php curl.php
对等证书无法使用已知CA证书进行身份验证

上的数据http://curl.haxx.se/docs/sslcerts.html非常有用。实际上,它告诉您在/etc/pki/nssdb中添加一个缺失的链接,以使用ca-bundle.crt文件。你这样做:

#cd/etc/pki/nssdb
#ln-s/usr/lib64/libnssckbi.so libnssckbi.so

现在您可以进行客户端身份验证,前提是您的证书方便使用:

<?php程序
$数据
=“<soap:Envelope>[…]</soap:En信封>”
$tuCurl(美元)=卷曲_ init();
卷曲_顶点($tuCurl美元,曲线_ URL,"https://example.com/path/for/soap/url/");
卷曲_顶点($tuCurl(美元),CURLOPT_PORT(光标_端口),443);
卷曲_顶点($tuCurl(美元),曲线_圆台,0);
卷曲_顶点($tuCurl(美元),光标_页眉,0);
卷曲_顶点($tuCurl(美元),曲线_曲线,);
当前设置选项($tuCurl(美元),CURLOPT_SSLCERT曲线,获取cwd() .“/client.pem”);
卷曲_顶点($tuCurl(美元),CURLOPT_SSLKEY曲线,获取cwd() .“/keyout.pem”);
卷曲_顶点($tuCurl(美元),CURLOPT_CAINFO曲线,获取cwd() .“/ca.pem”);
当前设置选项($tuCurl(美元),CURLOPT_POST(光标_位置),1);
卷曲_顶点($tuCurl(美元),曲线_SSL_VERIFYPEER,1);
卷曲_顶点($tuCurl(美元),CURLOPT_return传输,1);
卷曲_顶点($tuCurl(美元),CURLOPT_POSTFIELDS(曲线_定位字段),$数据);
卷曲_顶点($tuCurl(美元),CURLOPT_HTTPHEADER曲线,数组(“内容类型:text/xml”,“SOAPAction:\”/soap/action/query\“”,“内容长度:”.斯特伦($数据)));

$tuData(美元)=卷曲_执行($tuCurl美元);
如果(!
卷曲_ rrno($tuCurl(美元))){
$信息=curl_getinfo(卷发信息)($tuCurl(美元));
回声
“接受”.$信息['总计时间'] .'向发送请求的秒数'.$信息[“url”];
}其他{
回声
'卷曲错误:'.curl_error(卷曲错误)($tuCurl(美元));
}

curl_close(卷曲_闭合)($tuCurl(美元));
回声
$tuData(美元)
?>
阿特姆在zabsoft dot公司
14年前
嘿,我修改了php5的脚本。我还添加了支持服务器身份验证。并修复了脚本上的一些小错误。

[编辑:danbrown AT php DOT net:原件由(unlcuky13 AT gmail DOT com)于2009年4月19日编写。包括以下注释:
下面是我使用PHP 5面向对象封装的方法,使事情变得更容易。]

<?php程序
我的卷发{
受保护的
$_useragent=“Mozilla/4.0(兼容;MSIE 6.0;Windows NT 5.1”
受保护的
url(_U)
受保护的
$_后续位置
受保护的
$_timeout(超时)
受保护的
$_max重定向
受保护的
$_cookie文件位置='./cookie.txt”
受保护的
成本(_P)
受保护的
$_postFields
受保护的
$引用程序="http://www.google.com网站"

受保护的
$会话(_S)
受保护的
$网页
受保护的
$包含页眉
受保护的
$无正文
受保护的
$状态
受保护的
$银行转账
公众的
$身份验证=0
公众的
$授权名称=''
公众的
$身份验证=''

公共职能
使用身份验证($使用){
$这个->身份验证=0
如果(
$使用==真的)$这个->身份验证=1
}

公共职能
集合名称($名称){
$这个->身份验证名称=$名称
}
公共职能
setPass(设置通过)($通过){
$这个->身份验证(_P)=$通过
}

公共职能
__构造($网址,$follow位置=真的,$timeOut(超时)=30,$最大红色=4,$binaryTransfer(二进制传输)=,$includeHeader(包含标题)=,$无正文=)
{
$这个->_网址=$网址
$这个->_跟随位置=$follow位置
$这个->_超时=$timeOut(超时)
$这个->_最大重定向数=$maxRedirecs
$这个->_没有尸体=$无正文
$这个->_包括页眉=$includeHeader(包含标题)
$这个->_二进制传输=$binaryTransfer(二进制转账)

$这个->_烹饪文件位置=目录名(__文件__).'/cookie.txt'

}

公共职能
setReferer(设置引用)($参考){
$这个->_裁判=$参考
}

公共职能
设置Cookie文件位置($路径)
{
$这个->_cookie文件位置=$路径
}

公共职能
设置Post($postFields(后字段))
{
$这个->_岗位=真的
$这个->_postFields(后期字段)=$postFields(后字段)
}

公共职能
设置用户代理($用户代理)
{
$这个->_用户代理=$userAgent(用户代理)
}

公共职能
创建URL($网址=“空”)
{
如果(
$网址=“空”){
$这个->_网址=$网址
}

美元=卷曲_ init();

卷曲_顶点(%s美元,曲线_ URL,$这个->_网址);
卷曲_顶点(%s美元,CURLOPT_HTTPHEADER曲线,数组('预期:'));
卷曲_顶点(%s美元,CURLOPT_TIMEOUT(光标_超时),$这个->_超时);
卷曲_顶点(%s美元,曲线_最大值,$这个->_最大重定向数);
卷曲_顶点(%s美元,CURLOPT_返回传输,真的);
卷曲_顶点(%s美元,卷曲_卷曲位置,$这个->_跟随位置);
当前设置选项(%s美元,CURLOPT_COOKIEJAR曲线,$这个->_烹饪文件位置);
卷曲_顶点(%s美元,CURLOPT_COOKIEFILE曲线,$这个->_烹饪文件位置);

如果(
$这个->身份验证==1){
卷曲_顶点(%s美元,CURLOPT_USERPWD(光标_用户),$这个->身份验证名称.':'.$这个->身份验证(_P));
}
如果(
$这个->_岗位)
{
当前设置选项(%s美元,CURLOPT_POST(光标_位置),真的);
卷曲_顶点(%s美元,CURLOPT_POSTFIELDS(曲线_定位字段),$这个->_postFields(后期字段));

}

如果(
$这个->_包括页眉)
{
卷曲_顶点(%s美元,CURLOPT_HEADER(光标_页眉),真的);
}

如果(
$这个->_没有尸体)
{
卷曲_顶点(%s美元,曲线_天体,真的);
}
/*
if($this->_binary)
{
curl_setopt($s,CURLOPT_BINARYTRANSFER,true);
}
*/
卷曲_顶点(美元,CURLOPT_USERAGENT(光标_用户代理),$这个->_用户代理);
卷曲_顶点(%s美元,光标_参考,$这个->_裁判);

$这个->_网页=卷曲_执行(%s美元);
$这个->_状态=curl_getinfo(curl_getinfo)(%s美元,CURLINFO_HTTP_代码);
curl_close(卷曲_闭合)(%s美元);

}

公共职能
获取HttpStatus()
{
返回
$这个->_状态
}

公共职能
__托斯林(){
返回
$这个->_网页
}
}
?>

[EDIT BY danbrown AT php DOT net:包含由“roetsch.beni AT googlemail(DOT)com”于2009年8月2日提供的错误修复程序,并带有以下注释:“修复错误修复程序:lighthttp服务器上的417错误。”]
安吉洛·瓦布利
2天前
获取更多信息<a href=https://galaxyswapper.xyz/>下载星系交换v2</a>
ramez在dot dontspan dot zegenie dot com
13年前
在我的Windows 7机器上,CURL在PHP5.3和Apache2.2.X上失败。

事实证明,将提到的两个dll(libeay32和sslea32)从php文件夹复制到system32文件夹是不够的。您必须取消阻止这两个文件。

右键单击文件,为每个文件选择unblock。然后重新启动Apache。

Windows中添加了另一个非常方便的安全功能。
zle.lc号
3年前
分享就是关怀,包括把手。

<?php程序

$url_one(美元)
=“php.net”
$url_two=""

$用户代理=“Mozilla HotFox 1.0”

美元ch=卷曲_ init();
卷曲_顶点(美元ch,曲线_ URL,$url_one(美元).$url_two);
卷曲_顶点(千美元,CURLOPT_USERAGENT(光标_用户代理),$用户代理);
卷曲_顶点(美元ch,CURLOPT_返回传输,真的);
卷曲_顶点(美元ch,CURLOPT_跟随位置,1);
卷曲_顶点(美元ch,CURLOPT_HEADER(光标_页眉),0);
卷曲_顶点(美元ch,曲线_天体,0);
卷曲_顶点(美元ch,CURLOPT_TIMEOUT(光标_超时),30);
$卢比=卷曲_执行(美元ch);
curl_close(卷曲_闭合)(美元ch);

$url_two(两个)=“lazyp.net”
$url_one(美元)=""
$res_two个=卷曲_执行(美元ch);
curl_close(卷曲_闭合)(美元ch);

?>
gmail dot com的新用户
5年前
FYI cURL支持(默认启用,ok)是安装和配置wiki门户的集合扩展的先决条件。https://pickbestscope.com/
qr世界网
9年前
这里有一个函数,我使用它通过cURL获取URL的内容:

函数getUrlContent($url){
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$URL);
curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/4.0(兼容;MSIE 6.0;Windows NT 5.1;.NET CLR 1.1.4322)');
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,5);
curl_setopt($ch,CURLOPT_TIMEOUT,5);
$data=curl_exec($ch);
$httpcode=curl_getinfo($ch,CURLINFO_HTTP_CODE);
curl_close($ch);
返回($httpcode>=200&&$httpcode<300)$数据:假;
}

来源于此网站:

http://softontherocks.blogspot.com/2014/11/descargar-el-contenido-de-una-url.html
jc阿根廷gmail网站
4年前
请注意,curl的新版本使用http2作为默认值,因此如果您有一些奇怪的错误、0 http状态代码等,请在代码中明确指定http版本。
gmail dot com的pyromus
15年前
你可以使用这个类快速入门

<?php程序
cURL{
无功功率,无功功率
$个标题
无功功率,无功功率
$用户代理
无功功率,无功功率
$压缩
无功功率,无功功率
$cookie_file
无功功率,无功功率
$代理
功能
cURL($个cookie=真的,$cookie='cookie.txt',$压缩=“gzip”,$代理='') {
$这个->标题[] ='接受:image/gif、image/x-bitmap、image.jpeg、image/pjpeg'
$这个->标题[]='连接:保持活动'
$这个->标题[] ='内容类型:application/x-www-form-urlencoded;字符集=UTF-8'
$这个->用户代理(_A)=“Mozilla/4.0(兼容;MSIE 7.0;Windows NT 5.1;.NET CLR 1.0.3705;.NET CLR 1.1.4322;Media Center PC 4.0)”
$这个->压缩=$压缩
$这个->代理=$代理
$这个->饼干=$个cookie
如果(
$这个->饼干==真的)$这个->饼干($cookie);
}
功能
饼干($cookie_file) {
如果(
文件存在(_E)($cookie_file)) {
$这个->烹饪文件(_F)=$cookie_file
}其他{
fopen公司($cookie_file,“w”)或$这个->错误('无法打开cookie文件。确保此目录具有正确的权限');
$这个->烹饪文件=$cookie_file
f关闭($这个->烹饪文件(_F));
}
}
功能
得到($网址) {
$进程=卷曲_ init($网址);
卷曲_顶点($过程,CURLOPT_HTTPHEADER曲线,$这个->标题);
卷曲_顶点($进程,光标_页眉,0);
卷曲_顶点($进程,CURLOPT_USERAGENT(光标_用户代理),$这个->用户代理(_A));
如果(
$这个->饼干==真的)卷曲_顶点($进程,CURLOPT_COOKIEFILE曲线,$这个->烹饪文件(_F));
如果(
$这个->饼干==真的)卷曲_顶点($进程,CURLOPT_COOKIEJAR曲线,$这个->烹饪文件(_F));
卷曲_顶点($进程,曲线_编码,$这个->压缩);
卷曲_顶点($进程,CURLOPT_TIMEOUT(光标_超时),30);
如果(
$这个->代理)卷曲_顶点($进程,曲线_代理,$这个->代理);
卷曲_顶点($进程,CURLOPT_返回传输,1);
当前设置选项($进程,卷曲_卷曲位置,1);
$返回=卷曲_执行($进程);
curl_close(卷曲_闭合)($进程);
返回
$返回
}
功能
邮递($网址,$数据) {
$进程=卷曲_ init($网址);
卷曲_顶点($进程,CURLOPT_HTTPHEADER曲线,$这个->标题);
卷曲_顶点($进程,光标_页眉,1);
卷曲_顶点($进程,CURLOPT_USERAGENT(光标_用户代理),$这个->用户代理(_A));
如果(
$这个->饼干==真的)卷曲_顶点($进程,CURLOPT_COOKIEFILE曲线,$这个->烹饪文件(_F));
如果(
$这个->饼干==真的)卷曲_顶点($进程,CURLOPT_COOKIEJAR曲线,$这个->烹饪文件(_F));
卷曲_顶点($进程,CURLOPT_编码,$这个->压缩);
卷曲_顶点($进程,CURLOPT_TIMEOUT(光标_超时),30);
如果(
$这个->代理)卷曲_顶点($进程,曲线_代理,$这个->代理);
卷曲_顶点($进程,CURLOPT_POSTFIELDS(曲线_定位字段),$数据);
卷曲_顶点($过程,CURLOPT_返回传输,1);
卷曲_顶点($进程,卷曲_卷曲位置,1);
卷曲_顶点($进程,CURLOPT_POST(光标_位置),1);
$返回=卷曲_执行($进程);
curl_close(卷曲_闭合)($进程);
返回
$返回
}
功能
错误($错误) {
回声
“<center><div style='width:500px;border:3px solid#FFEEFF;padding:3px;background color:#FFDDFF;font-family:verdana;font-size:10px'><b>cURL错误</b><br>$错误</div></center>“
模具;
}
}
$立方厘米=新cURL();
$立方厘米->得到('http://www.example.com');
立方厘米美元->邮递('http://www.example.com',“foo=bar”);
?>

[EDIT BY danbrown AT php DOT net:包括“Anonymous”于2008年12月1日06:52提供的错误修复程序。根据RFC 2606,还将实际URL替换为example.com。]

[由danbrown AT php DOT net编辑:包括2009年11月24日(manuel AT rankone DOT ch)提供的错误修复程序,以正确引用cURL初始化。]
gmail网站的fred dot knieper
10年前
由于没有人记录哪一个curl命令行选项与哪一个库函数一起使用,我感到非常沮丧,我发现如果您添加`--libcurl foo.C,curl指令行会告诉您(以C程序的形式)`

如果您一直在努力弄清楚如何在PHP中使用漂亮的curl命令行,那么这很容易!
gmx点网的eflash
15年前
为了对安全站点使用curl,您需要一个ca-bundle.crt文件;下面是我编写的一个PHP脚本,它创建了一个新的ca-bundle:
http://www.gknw.net/php/phpscripts/mk-ca-bundle.php
我还用其他语言编写了脚本,例如现在随curl发行版提供的Perl脚本:
http://curl.haxx.se/lxr/source/lib/mk-ca-bundle.pl
以及Win32 WSH脚本(如果您愿意):
http://www.gknw.net/vb/scripts/mk-ca-bundle.vbs

HTH,Guenter。
雅虎网站shidec00
13年前
这种异常只发生在窗户上。
服务器指示缺少由http_build_query()构建的一些变量。

<?php程序
//。。。
//。。。
//。。。
$ping_url=$这个->sx_url.“ping.php?”.http_build_query(http_构建查询)($期权);
$消息=$这个->_发布URL($ping_url);
?>

调试后,我发现$ping_url包含如下url:

http://example.com/ping.php?app=1&ampkey=邮件;ttd=df52861e

但myserver给出“No ttd GET variable”响应

通过添加可选参数来确保http_build_query()仅使用“&”作为参数分隔符,而不使用“&amp;”,修复了此问题

<?php程序
//。。。
//。。。
//。。。
$ping_url=$这个->sx_url.“ping.php?”.http_build_query(http_build_query)($个选项,'','&');
$消息=$这个->_发布URL($ping_url);
?>
东超769390531,163 dot com
6年前
<?php程序
/**
*Curl send-get请求,支持HTTPS协议
*@param string$url请求url
*@param string$refer请求refer
*@param int$timeout超时秒数
*@返回混合
*/
功能获取请求($网址,$参考="",$超时=10)
{
$ssl(美元)=脱衣舞($网址,'https(https)://') ===0真的:
$curlObj美元=卷曲_ init();
$个选项=========================================================[
曲线_ URL=>$网址,
CURLOPT_返回传输=>1,
卷曲_卷曲位置=>1,
光标_自动参考=>1,
CURLOPT_USERAGENT(光标_用户代理)=>“Mozilla/5.0(兼容;MSIE 5.01;Windows NT 5.0)”,
CURLOPT_TIMEOUT(光标_超时)=>$超时,
CURLOPT_HTTP_版本=>曲线_HTTP_VERSION_1_0,
CURLOPT_HTTPHEADER曲线=> ['预期:'],
CURLOPT_IPRESOLVE公司=>曲线_IP分辨率_V4,
];
如果(
$参考) {
$个选项[光标_参考] =$参考
}
如果(
$ssl(美元)) {
//支持https
$个选项[CURLOPT_SSL_服务器] =
$个选项[曲线_SSL_VERIFYPEER] =
}
卷曲_顶点_阵列($curlObj(美元),$个选项);
$return数据=卷曲_执行($curlObj(美元));
如果(
卷曲_ rrno($curlObj(美元))) {
//错误消息
$returnData(返回数据)=电流误差($curlObj(美元));
}
curl_close(卷曲_闭合)($curlObj(美元));
返回
$returnData(返回数据)
}

/**
*Curl发送post请求,支持HTTPS协议
*@param string$url请求url
*@param array$data发布数据
*@param string$refer请求refer
*@param int$timeout超时秒数
*@param array$header另一个请求头
*@返回混合
*/
功能发布请求($网址,$数据,$参考="",$超时=10,$标题= [])
{
$curlObj(美元)=卷曲_ init();
$ssl(美元)=脱衣舞($网址,'https(https)://') ===0真的:
$个选项=========================================================[
曲线_ URL=>$网址,
CURLOPT_返回传输=>1,
CURLOPT_POST(光标_位置)=>1,
CURLOPT_POSTFIELDS(曲线_定位字段)=>$数据,
卷曲_卷曲位置=>1,
CURLOPT_自动参考=>1,
CURLOPT_USERAGENT(光标_用户代理)=>“Mozilla/5.0(兼容;MSIE 5.01;Windows NT 5.0)”,
CURLOPT_TIMEOUT(光标_超时)=>$超时,
CURLOPT_HTTP_版本=>曲线_HTTP_VERSION_1_0,
CURLOPT_HTTPHEADER曲线=> ['预期:'],
曲线_预解=>曲线_IP分辨率_V4,
光标_参考=>$参考
];
if(!空(
$标题)) {
$个选项[CURLOPT_HTTPHEADER曲线] =$标题
}
如果(
$参考) {
$个选项[光标_参考] =$参考
}
如果(
美元ssl) {
//支持https
$个选项[CURLOPT_SSL_服务器] =
$个选项[曲线_SSL_VERIFYPEER] =
}
卷曲_顶点_阵列($curlObj(美元),$个选项);
$returnData(返回数据)=卷曲_执行($curlObj(美元));
如果(
卷曲_ rrno($curlObj(美元))) {
//错误消息
$returnData(返回数据)=curl_error(卷曲错误)($curlObj(美元));
}
curl_close(卷曲_闭合)($curlObj(美元));
返回
$returnData(返回数据)
}

$获取资源=获取请求("https://secure.php.net网站/");
回声
$获取资源//获取php.net的索引页html

$postRes(后Res)=发布请求("https://secure.php.net网站/",[]);
回声
$postRes(后Res)
cliffclof atty gmail网站
14年前
一种解决方案,使用相同的连接处理对同一组url的重复调用,在不同的浏览器选项卡中模拟频繁的ajax调用。

在一种独特的情况下,您可能需要设置一个cookie,然后将该cookie用于使用同一会话cookie的多个单独的持久连接。问题是,在进行持久调用时,会话cookie可能会发生更改。如果将每个curl句柄设置为在关闭时更新共享的cookiejar,则可以根据句柄的关闭顺序,用旧会话值覆盖新找到的会话值。此外,由于cookiejar只在curl_close上写入,因此您可能在某些“伪造的浏览器选项卡”中使用了不同或旧的会话信息。

为了解决这个问题,我创建了一个独特的句柄,该句柄专门用于使用CURLOPT_COOKIEJAR设置cookie文件。然后,我只在多个单独的持久句柄上使用只读CURLOPT_COOKIEFILE。

这解决了共享cookie使用最新的cookie信息写入值并保持持久调用的问题。

注意:在我的例子中,多个调用是在while循环中,我在shell中使用php。会话cookie值加上浏览器类型限制了可用的连接数,我想使用每个会话的最大连接数。
罗密特
8年前
/*
示例值
url-'http://example.com'
fields-数组('var'=>'value'),或可以为空
auth-“user:password”,或可以为空
罗密特,2015年10月4日
*/
函数curl($url,$fields=array(),$auth=false){

$curl=curl_init($url);
curl_setopt($curl,CURLOPT_USERAGENT,“Mozilla/5.0(Windows;U;Windows NT 5.1;en-US;rv:1.8.1.1)Gecko/20061204 Firefox/2.0.1”);
curl_setopt($curl,CURLOPT_RETURNTTRANSFER,1);
curl_setopt($curl,CURLOPT_VERBOSE,1);
curl_setopt($curl,CURLOPT_HEADER,1);

if($auth){
curl_setopt($curl,CURLOPT_USERPWD,“$auth”);
curl_setopt($curl,CURLOPT_HTTPAUTH,CURRAUTH_BASIC);
}

if($字段){
$fields_string=http_build_query($fields);
curl_setopt($curl,CURLOPT_POST,true);
curl_setopt($curl,CURLOPT_BINARYTRANSFER,true);
curl_setopt($curl,CURLOPT_POSTFIELDS,$fields_string);
}

$response=curl_exec($curl);
$header_size=curl_getinfo($curl,CURLINFO_header_size);
$header_string=子项($response,0,$header_size);
$body=子项($response,$header_size);

$header_rows=爆炸(PHP_EOL,$header_string);
$header_rows=数组过滤器($header_ rows,trim);
foreach((数组)$header_rows作为$hr){
$colonpos=字符串($hr,':');
$key=$colonpos!==假?substr($hr,0,$colonpos):(int)$i++;
$headers[$key]=$colonpos!==假?修剪(子项($hr,$colonpos+1)):$hr;
}
foreach((数组)$headers作为$key=>$val){
$vals=爆炸(';',$val);
if(计数($vals)>=2){
unset($headers[$key]);
foreach($vals作为$vk=>$vv){
$equalpos=strpos($vv,'=');
$vkey=$equalpos!==假?trim(substr($vv,0,$equalpos)):(int)$j++;
$headers[$key][$vkey]=$equalpos!==假?微调(子项($vv,$equalpos+1)):$vv;
}
}
}
//print_rr($headers);
curl_close($curl);
返回数组($body,$headers);
}

列表($d['body'],$d['标题'])=卷曲2('http://google.com',数组(q=>'123');
//用POST变量“q”作为“123”发送到google.com

echo“<前>”;
打印_($d);

---------

输出:

阵列
(
[headers]=>数组
(
[0]=>HTTP/1.1 405不允许使用方法
[允许]=>GET,HEAD
[日期]=>2015年4月20日星期一22:20:10 GMT
[服务器]=>gws
[内容长度]=>1453
[X帧选项]=>SAMEORIGIN
[替代协议]=>80:quic,p=1
[内容类型]=>数组
(
[0]=>文本/html
[字符集]=>UTF-8
)

[X-XSS-Protection]=>阵列
(
[1] => 1
[模式]=>块
)

)

[正文]=><!DOCTYPE html>。。。等等

)
yann在ykweyer dot fr
7年前
如果您需要使用CURL发送一组文件(典型情况是:POST变量到REST API),那么在POSTFIELD中设置一组CURL文件是行不通的。您必须在POSTFIELD中设置与要发送的文件数量一样多的变量:

<?php程序
//无法工作:
$后字段=数组(
'文件'=>数组(
新的
CURL文件($路径1),
新的
CURL文件($路径2),
//。。。
)
);
当前设置选项(美元ch,CURLOPT_POSTFIELDS(曲线_定位字段),$个postfields);

//请使用此选项:
$个postfields=数组(
'文件[0]'=>新CURL文件($路径1),
'文件[1]'=>新CURL文件($路径2),
//。。。
);
当前设置选项(美元ch,CURLOPT_POSTFIELDS(曲线_定位字段),$个postfields);
?>
jeremyzaretski网站管理员
15年前
我想创建一个脚本,作为外部服务器和内部服务器之间的桥梁,其中内部服务器没有连接到互联网,但具有连接到外部服务器的用户所需的信息。我想出了一个主意,使用curl从外部服务器连接到内部服务器(使用请求变量发送查询),并返回文件服务器返回的所有内容(数据和头)。

由于curl_exec不喜欢我使用CURLOPT_HEADERFUNCTION的函数直接转储标头,因此被分段错误和崩溃逼得发疯:

<?php程序
功能重复_标题($卷发,$标题)
{
收割台($标题);
返回
斯特伦($标题);
}
?>

…我尝试(一时兴起)复制和修剪页眉,并将副本传递给页眉函数。。。

<?php程序
功能重复_标题($卷发,$标题)
{
$重复=修剪($标题);
收割台($重复);
返回
斯特伦($标题);
}
?>

这很好。我不知道这是PHP4的一些怪癖,还是我对curl和header函数的工作原理缺乏了解。
gmail dot com的用户
5年前
评级由FFBE子编辑的Discord维护。新手的问题和某个单位是否好的问题应该在。。http://ffbeunitranking.com/
网络直播中的政治人物
5年前
我读这个网站有问题。

https://jornalggn.com.br/notesia/moro-agora-levanta-sigilo-de-decisao-que-protege-delatores-de-orgaos-federalis-0

因为重定向和浏览器检查。
来自此的任何链接https://jornalggn.com.br/

我收到的只是这个回复:

“在访问jornalggn.com.br之前,请检查您的浏览器。

这个过程是自动的。您的浏览器将很快重定向到您请求的内容。

请等待5秒钟…”

任何提示,如何使用php_curl解决此问题
提前谢谢你
--DJ(DJ)
-15个
马库特拉66在塞兹纳姆-多特区
10年前
FYI cURL支持(默认启用,ok)是安装和配置wiki门户的集合扩展的先决条件。
hotmail dot com上的madhouse-network
12年前
curl似乎不适用于SSL TLS(FTPES)

它将抛出以下错误:

(1) libcurl中不支持或禁用协议ftpe
多诺万纳普利
1年前
<a href>=https://omg.omgomgdeep.com/>омг-omg tor,omg omg darkmarketфорум
mailtrix dot-net上的cikemic
6年前
读了这篇帖子后,我嘴里只有一个词,那就是“哇”。这个帖子帮助我获得了一些新知识。因此,感谢您与我们分享宝贵的想法。
http://bestfrontandreadashcam.com/
-25个
午夜vip网站上的阿图罗
10年前
嘿,我修改了php5的脚本。我还添加了支持服务器身份验证。并修复了脚本上的一些小错误。

<?php程序
我的卷发{
受保护的
$_useragent=“Mozilla/4.0(兼容;MSIE 6.0;Windows NT 5.1”
受保护的
url(_U)
受保护的
$_后续位置
受保护的
$_timeout(超时)
受保护的
$_maxRedirects(最大重定向)
受保护的
$_cookie文件位置='./cookie.txt'
受保护的
成本(_P)
受保护的
$_postFields
受保护的
$引用程序="http://www.midnightvip.com"

受保护的
$会话(_S)
受保护的
$网页
受保护的
$包含页眉
受保护的
$无正文
受保护的
$状态
受保护的
$银行转账
公众的
$身份验证=0
公众的
$授权名称=''
公众的
$身份验证=''

公共职能
使用Auth($使用){
$这个->身份验证=0
如果(
$使用==真的)$这个->身份验证=1
}

公共职能
集合名称($名称){
$这个->身份验证名称=$名称
}
公共职能
setPass(设置通过)($通过){
$这个->身份验证(_P)=$通过
}

公共职能
__构造($网址,$follow位置=真的,$timeOut(超时)=30,$maxRedirecs=4,$binaryTransfer(二进制转账)=,$includeHeader(包含标题)=,$无正文=)
{
$这个->_网址=$网址
$这个->_跟随位置=$follow位置
$这个->_超时=$timeOut(超时)
$这个->_最大重定向数=$maxRedirecs
$这个->_无正文=$无正文
$这个->_包括页眉=$includeHeader(包含标题)
$这个->_二进制传输=$binaryTransfer(二进制传输)

$这个->_烹饪文件位置=目录名(__文件__).'/cookie.txt'

}

公共职能
setReferer(设置引用)($参考){
$这个->_裁判=$参考
}

公共职能
设置Cookie文件位置($路径)
{
$这个->_烹饪文件位置=$path(路径)
}

公共职能
设置Post($postFields(后字段))
{
$这个->_岗位=真的
$这个->_postFields(后期字段)=$postFields(后字段)
}

公共职能
设置用户代理($用户代理)
{
$这个->_用户代理=$用户代理
}

公共职能
创建URL($网址=“空”)
{
如果(
$网址=“空”){
$这个->_网址=$网址
}

%s美元=电流初始化();

卷曲_顶点(%s美元,曲线_ URL,$这个->_网址);
卷曲_顶点(%s美元,CURLOPT_HTTPHEADER曲线,数组('预期:'));
卷曲_顶点(%s美元,CURLOPT_TIMEOUT(光标_超时),$这个->_超时);
卷曲_顶点(%s美元,曲线_最大值,$这个->_最大重定向数);
卷曲_顶点(%s美元,CURLOPT_返回传输,真的);
卷曲_顶点(%s美元,卷曲_卷曲位置,$这个->_跟随位置);
卷曲_顶点(美元,CURLOPT_COOKIEJAR曲线,$这个->_烹饪文件位置);
卷曲_顶点(%s美元,CURLOPT_COOKIEFILE曲线,$这个->_cookie文件位置);

如果(
$这个->身份验证==1){
卷曲_顶点(%s美元,CURLOPT_USERPWD(光标_用户),$这个->身份验证名称.':'.$这个->身份验证(_P));
}
如果(
$这个->_岗位)
{
卷曲_顶点(美元,CURLOPT_POST(光标_位置),真的);
卷曲_顶点(%s美元,CURLOPT_POSTFIELDS(曲线_定位字段),$这个->_postFields(后期字段));

}

如果(
$这个->_包括页眉)
{
卷曲_顶点(%s美元,光标_页眉,真的);
}

如果(
$这个->_无正文)
{
卷曲_顶点(%s美元,曲线_天体,真的);
}
/*
if($this->_binary)
{
curl_setopt($s,CURLOPT_BINARYTRANSFER,true);
}
*/
卷曲_顶点(%s美元,CURLOPT_用户代理,$这个->_用户代理);
卷曲_顶点(%s美元,光标_参考,$这个->_裁判);

$这个->_网页=卷曲_执行(%s美元);
$这个->_状态=curl_getinfo(卷发信息)(美元,CURLINFO_HTTP_代码);
curl_close(卷曲_闭合)(%s美元);

}

公共职能
获取HttpStatus()
{
返回
$这个->_状态
}

公共职能
__托斯林(){
返回
$这个->_网页
}
}
?>
Anthony滴水
1年前
<a href>=https://torplanets.com/>百万каркнет
到顶部