客户端 URL 库

添加注释

用户贡献的注释 31 个注释

22
frank at interactinet dot com
13 年前
我写了以下内容,以查看提交的 URL 是否具有有效的 http 响应代码,以及它是否能快速响应。

像这样使用代码

<?php
$is_ok
= http_response($url); // 仅当 http 响应代码 < 400 时返回 true
?>

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

<?php
http_response
($url,'400'); // 如果 http 状态是 400,则返回 true
?>

第三个参数允许您指定愿意等待响应的时间。

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

<?php
function http_response($url, $status = null, $wait = 3)
{
$time = microtime(true);
$expire = $time + $wait;

// 我们分叉进程,这样我们就不必等待超时
$pid = pcntl_fork();
if (
$pid == -1) {
die(
'无法分叉');
} else if (
$pid) {
// 我们是父进程
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_NOBODY, TRUE); // 移除主体
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$head = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if(!
$head)
{
return
FALSE;
}

if(
$status === null)
{
if(
$httpCode < 400)
{
return
TRUE;
}
else
{
return
FALSE;
}
}
elseif(
$status == $httpCode)
{
return
TRUE;
}

return
FALSE;
pcntl_wait($status); // 防止僵尸进程
} else {
// 我们是子进程
while(microtime(true) < $expire)
{
sleep(0.5);
}
return
FALSE;
}
}
?>

希望这个例子能帮到您。它没有经过 100% 测试,因此任何反馈 [直接通过电子邮件发送给我] 都将不胜感激。
8
gmail@asmqb7
8 年前
警告警告

在这个例子中: https://php.net/manual/en/book.curl.php#102885 由“frank at interactinet dot com”

代码中有一个小错误

<?php

...

elseif(
$status == $httpCode)
{
return
TRUE;
}

return
FALSE;
pcntl_wait($status); // 防止僵尸进程
} else {
// 我们是子进程
while(microtime(true) < $expire)

...

?>

这段代码会在 `return` 处立即退出函数,并且 `pcntl_wait()` 在任何情况下都不会被执行。

然而,我无法看到该函数的其他任何问题。
8
artax_N_O_S_P_A_M_erxes2 at iname dot com
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
$data
= "<soap:Envelope>[...]</soap:Envelope>";
$tuCurl = curl_init();
curl_setopt($tuCurl, CURLOPT_URL, "https://example.com/path/for/soap/url/");
curl_setopt($tuCurl, CURLOPT_PORT , 443);
curl_setopt($tuCurl, CURLOPT_VERBOSE, 0);
curl_setopt($tuCurl, CURLOPT_HEADER, 0);
curl_setopt($tuCurl, CURLOPT_SSLVERSION, 3);
curl_setopt($tuCurl, CURLOPT_SSLCERT, getcwd() . "/client.pem");
curl_setopt($tuCurl, CURLOPT_SSLKEY, getcwd() . "/keyout.pem");
curl_setopt($tuCurl, CURLOPT_CAINFO, getcwd() . "/ca.pem");
curl_setopt($tuCurl, CURLOPT_POST, 1);
curl_setopt($tuCurl, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($tuCurl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($tuCurl, CURLOPT_POSTFIELDS, $data);
curl_setopt($tuCurl, CURLOPT_HTTPHEADER, array("Content-Type: text/xml","SOAPAction: \"/soap/action/query\"", "Content-length: ".strlen($data)));

$tuData = curl_exec($tuCurl);
if(!
curl_errno($tuCurl)){
$info = curl_getinfo($tuCurl);
echo
'花费 ' . $info['total_time'] . ' 秒发送请求到 ' . $info['url'];
} else {
echo
'Curl 错误: ' . curl_error($tuCurl);
}

curl_close($tuCurl);
echo
$tuData;
?>
9
artem at zabsoft dot co dot in
15 年前
嗨,我修改了 PHP 5 的脚本。我还添加了对服务器身份验证的支持,并修复了脚本中的一些小错误。

[由 danbrown AT php DOT net 编辑:原作者为 (unlcuky13 AT gmail DOT com),发布于 19-APR-09。以下注释包含在内
以下是通过 PHP 5 面向对象封装使用该脚本的方法,使操作更轻松。]

<?php
class mycurl {
protected
$_useragent = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1';
protected
$_url;
protected
$_followlocation;
protected
$_timeout;
protected
$_maxRedirects;
protected
$_cookieFileLocation = './cookie.txt';
protected
$_post;
protected
$_postFields;
protected
$_referer ="http://www.google.com";

protected
$_session;
protected
$_webpage;
protected
$_includeHeader;
protected
$_noBody;
protected
$_status;
protected
$_binaryTransfer;
public
$authentication = 0;
public
$auth_name = '';
public
$auth_pass = '';

public function
useAuth($use){
$this->authentication = 0;
if(
$use == true) $this->authentication = 1;
}

public function
setName($name){
$this->auth_name = $name;
}
public function
setPass($pass){
$this->auth_pass = $pass;
}

public function
__construct($url,$followlocation = true,$timeOut = 30,$maxRedirecs = 4,$binaryTransfer = false,$includeHeader = false,$noBody = false)
{
$this->_url = $url;
$this->_followlocation = $followlocation;
$this->_timeout = $timeOut;
$this->_maxRedirects = $maxRedirecs;
$this->_noBody = $noBody;
$this->_includeHeader = $includeHeader;
$this->_binaryTransfer = $binaryTransfer;

$this->_cookieFileLocation = dirname(__FILE__).'/cookie.txt';

}

public function
setReferer($referer){
$this->_referer = $referer;
}

public function
setCookiFileLocation($path)
{
$this->_cookieFileLocation = $path;
}

public function
setPost ($postFields)
{
$this->_post = true;
$this->_postFields = $postFields;
}

public function
setUserAgent($userAgent)
{
$this->_useragent = $userAgent;
}

public function
createCurl($url = 'nul')
{
if(
$url != 'nul'){
$this->_url = $url;
}

$s = curl_init();

curl_setopt($s,CURLOPT_URL,$this->_url);
curl_setopt($s,CURLOPT_HTTPHEADER,array('Expect:'));
curl_setopt($s,CURLOPT_TIMEOUT,$this->_timeout);
curl_setopt($s,CURLOPT_MAXREDIRS,$this->_maxRedirects);
curl_setopt($s,CURLOPT_RETURNTRANSFER,true);
curl_setopt($s,CURLOPT_FOLLOWLOCATION,$this->_followlocation);
curl_setopt($s,CURLOPT_COOKIEJAR,$this->_cookieFileLocation);
curl_setopt($s,CURLOPT_COOKIEFILE,$this->_cookieFileLocation);

if(
$this->authentication == 1){
curl_setopt($s, CURLOPT_USERPWD, $this->auth_name.':'.$this->auth_pass);
}
if(
$this->_post)
{
curl_setopt($s,CURLOPT_POST,true);
curl_setopt($s,CURLOPT_POSTFIELDS,$this->_postFields);

}

if(
$this->_includeHeader)
{
curl_setopt($s,CURLOPT_HEADER,true);
}

if(
$this->_noBody)
{
curl_setopt($s,CURLOPT_NOBODY,true);
}
/*
if($this->_binary)
{
curl_setopt($s,CURLOPT_BINARYTRANSFER,true);
}
*/
curl_setopt($s,CURLOPT_USERAGENT,$this->_useragent);
curl_setopt($s,CURLOPT_REFERER,$this->_referer);

$this->_webpage = curl_exec($s);
$this->_status = curl_getinfo($s,CURLINFO_HTTP_CODE);
curl_close($s);

}

public function
getHttpStatus()
{
return
$this->_status;
}

public function
__tostring(){
return
$this->_webpage;
}
}
?>

[由 php DOT net 上的 danbrown 编辑:包含 2009 年 8 月 2 日由 "roetsch.beni at googlemail (dot) com" 提供的错误修复,并附有以下说明:“修复错误修复:lighthttp 服务器上的 417 错误。”]
0
zle.lc
3 年前
分享是一种美德,包含处理程序。

<?php

$url_one
= "php.net";
$url_two = "";

$user_agent = 'Mozilla HotFox 1.0';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url_one.$url_two);
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_NOBODY, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
$res = curl_exec($ch);
curl_close($ch);

$url_two = "lazyphp.net";
$url_one = "";
$res_two = curl_exec($ch);
curl_close($ch);

?>
0
newuser at gmail dot com
5 年前
Wiki 门户网站的集合扩展的安装和配置需要 cURL 支持(默认启用,已确认)。https://pickbestscope.com/
0
ramez at dot dontspan dot zegenie dot com
13 年前
在我的 Windows 7 机器上,PHP5.3 和 Apache2.2.X 上的 CURL 失败了。

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

右键单击文件,选择解除阻止,对每个文件都进行操作。然后重启 Apache。

Windows 中添加的另一个非常方便的安全功能。
-2
qrworld.net
9 年前
以下是一个我用来获取 URL 内容的 cURL 函数。

function getUrlContent($url){
$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; .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);
return ($httpcode>=200 && $httpcode<300) ? $data : false;
}

代码来源自该网站:

http://softontherocks.blogspot.com/2014/11/descargar-el-contenido-de-una-url.html
-3
jcmargentina at gmail dot com
4 年前
请注意,新版本的 curl 默认使用 http2,所以如果你遇到一些奇怪的错误,比如 0 http 状态码等等,请在代码中显式指定 http 版本。
-3
pyromus at gmail dot com
15 年前
你可以使用这个类进行快速输入

<?php
class cURL {
var
$headers;
var
$user_agent;
var
$compression;
var
$cookie_file;
var
$proxy;
function
cURL($cookies=TRUE,$cookie='cookies.txt',$compression='gzip',$proxy='') {
$this->headers[] = 'Accept: image/gif, image/x-bitmap, image/jpeg, image/pjpeg';
$this->headers[] = 'Connection: Keep-Alive';
$this->headers[] = 'Content-type: application/x-www-form-urlencoded;charset=UTF-8';
$this->user_agent = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0)';
$this->compression=$compression;
$this->proxy=$proxy;
$this->cookies=$cookies;
if (
$this->cookies == TRUE) $this->cookie($cookie);
}
function
cookie($cookie_file) {
if (
file_exists($cookie_file)) {
$this->cookie_file=$cookie_file;
} else {
fopen($cookie_file,'w') or $this->error('The cookie file could not be opened. Make sure this directory has the correct permissions');
$this->cookie_file=$cookie_file;
fclose($this->cookie_file);
}
}
function
get($url) {
$process = curl_init($url);
curl_setopt($process, CURLOPT_HTTPHEADER, $this->headers);
curl_setopt($process, CURLOPT_HEADER, 0);
curl_setopt($process, CURLOPT_USERAGENT, $this->user_agent);
if (
$this->cookies == TRUE) curl_setopt($process, CURLOPT_COOKIEFILE, $this->cookie_file);
if (
$this->cookies == TRUE) curl_setopt($process, CURLOPT_COOKIEJAR, $this->cookie_file);
curl_setopt($process,CURLOPT_ENCODING , $this->compression);
curl_setopt($process, CURLOPT_TIMEOUT, 30);
if (
$this->proxy) curl_setopt($process, CURLOPT_PROXY, $this->proxy);
curl_setopt($process, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($process, CURLOPT_FOLLOWLOCATION, 1);
$return = curl_exec($process);
curl_close($process);
return
$return;
}
function
post($url,$data) {
$process = curl_init($url);
curl_setopt($process, CURLOPT_HTTPHEADER, $this->headers);
curl_setopt($process, CURLOPT_HEADER, 1);
curl_setopt($process, CURLOPT_USERAGENT, $this->user_agent);
if (
$this->cookies == TRUE) curl_setopt($process, CURLOPT_COOKIEFILE, $this->cookie_file);
if (
$this->cookies == TRUE) curl_setopt($process, CURLOPT_COOKIEJAR, $this->cookie_file);
curl_setopt($process, CURLOPT_ENCODING , $this->compression);
curl_setopt($process, CURLOPT_TIMEOUT, 30);
if (
$this->proxy) curl_setopt($process, CURLOPT_PROXY, $this->proxy);
curl_setopt($process, CURLOPT_POSTFIELDS, $data);
curl_setopt($process, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($process, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($process, CURLOPT_POST, 1);
$return = curl_exec($process);
curl_close($process);
return
$return;
}
function
error($error) {
echo
"<center><div style='width:500px;border: 3px solid #FFEEFF; padding: 3px; background-color: #FFDDFF;font-family: verdana; font-size: 10px'><b>cURL Error</b><br>$error</div></center>";
die;
}
}
$cc = new cURL();
$cc->get('http://www.example.com');
$cc->post('http://www.example.com','foo=bar');
?>

[EDIT BY danbrown AT php DOT net: Includes a bugfix provided by "Anonymous" on 01-Dec-2008 @ 06:52. Also replaced real URL with example.com as per RFC 2606.]

[EDIT BY danbrown AT php DOT net: Includes a bugfix provided by (manuel AT rankone DOT ch) on 24-NOV-09 to properly reference cURL initialization.]
-3
fred dot knieper at gmail dot com
10 年前
在对没有人记录哪个 curl 命令行选项与哪个库函数相对应感到沮丧之后,我发现 curl 命令行会告诉你(以 C 程序的形式),如果你添加 `--libcurl foo.c`

如果你一直在努力弄清楚如何让你的 fancy curl 命令行在 PHP 中工作,这会让你轻松搞定!
-5
dongchao769390531 at 163 dot com
7 年前
<?php
/**
* 使用 Curl 发送 GET 请求,支持 HTTPS 协议
* @param string $url 请求 URL
* @param string $refer 请求来源
* @param int $timeout 超时时间(秒)
* @return mixed
*/
function getRequest($url, $refer = "", $timeout = 10)
{
$ssl = stripos($url,'https://') === 0 ? true : false;
$curlObj = curl_init();
$options = [
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_FOLLOWLOCATION => 1,
CURLOPT_AUTOREFERER => 1,
CURLOPT_USERAGENT => 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)',
CURLOPT_TIMEOUT => $timeout,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_0,
CURLOPT_HTTPHEADER => ['Expect:'],
CURLOPT_IPRESOLVE => CURL_IPRESOLVE_V4,
];
if (
$refer) {
$options[CURLOPT_REFERER] = $refer;
}
if (
$ssl) {
//支持 HTTPS
$options[CURLOPT_SSL_VERIFYHOST] = false;
$options[CURLOPT_SSL_VERIFYPEER] = false;
}
curl_setopt_array($curlObj, $options);
$returnData = curl_exec($curlObj);
if (
curl_errno($curlObj)) {
//错误信息
$returnData = curl_error($curlObj);
}
curl_close($curlObj);
return
$returnData;
}

/**
* 使用 Curl 发送 POST 请求,支持 HTTPS 协议
* @param string $url 请求 URL
* @param array $data POST 数据
* @param string $refer 请求来源
* @param int $timeout 超时时间(秒)
* @param array $header 其他请求头
* @return mixed
*/
function postRequest($url, $data, $refer = "", $timeout = 10, $header = [])
{
$curlObj = curl_init();
$ssl = stripos($url,'https://') === 0 ? true : false;
$options = [
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_POST => 1,
CURLOPT_POSTFIELDS => $data,
CURLOPT_FOLLOWLOCATION => 1,
CURLOPT_AUTOREFERER => 1,
CURLOPT_USERAGENT => 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)',
CURLOPT_TIMEOUT => $timeout,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_0,
CURLOPT_HTTPHEADER => ['Expect:'],
CURLOPT_IPRESOLVE => CURL_IPRESOLVE_V4,
CURLOPT_REFERER => $refer
];
if (!empty(
$header)) {
$options[CURLOPT_HTTPHEADER] = $header;
}
if (
$refer) {
$options[CURLOPT_REFERER] = $refer;
}
if (
$ssl) {
//支持 HTTPS
$options[CURLOPT_SSL_VERIFYHOST] = false;
$options[CURLOPT_SSL_VERIFYPEER] = false;
}
curl_setopt_array($curlObj, $options);
$returnData = curl_exec($curlObj);
if (
curl_errno($curlObj)) {
//错误信息
$returnData = curl_error($curlObj);
}
curl_close($curlObj);
return
$returnData;
}

$getRes = getRequest("https://secure.php.net/");
echo
$getRes;//获取 php.net 首页的 HTML 代码

$postRes = postRequest("https://secure.php.net/",[]);
echo
$postRes;
-4
eflash at gmx dot net
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

希望对你有帮助,Guenter。
-6
shidec00 at yahoo dot com
13 年前
这个异常只发生在 Windows 上。
服务器提示 http_build_query() 生成的某些变量丢失。

<?php
//...
//...
//...
$ping_url = $this->sx_url.'ping.php?'.http_build_query($options);
$message = $this->_post_curl($ping_url);
?>

调试后发现 $ping_url 包含类似这样的 URL

http://example.com/ping.php?app=1&amp;key=mail&amp;ttd=df52861e

但我的服务器返回了“没有 ttd GET 变量”的响应

这个问题通过添加可选参数来解决,以确保 http_build_query() 仅使用 '&' 作为参数分隔符,而不是 '&amp;'。

<?php
//...
//...
//...
$ping_url = $this->sx_url.'ping.php?'.http_build_query($options,'','&');
$message = $this->_post_curl($ping_url);
?>
-6
cliffclof atty gmail dotty com
14 年前
一个解决重复调用同一组 URL 的方案,使用相同的连接来模拟不同浏览器选项卡中频繁的 AJAX 调用。

在一个特殊的情况下,你可能需要设置一个 cookie,然后使用这个 cookie 进行多个独立的持久连接,使用相同的会话 cookie。问题是,在你进行持久调用时,会话 cookie 可能会发生变化。如果你将每个 Curl 句柄设置为在关闭时更新共享 cookiejar,那么你可能会用旧的会话值覆盖新找到的会话值,具体取决于句柄的关闭顺序。另外,由于 cookiejar 只有在 curl_close 时才写入,所以在某些“模拟的浏览器选项卡”中,你可能使用的是不同的或旧的会话信息。

为了解决这个问题,我创建了一个唯一的句柄,它专门用于打开和关闭,并使用 CURLOPT_COOKIEJAR 设置一个 cookie 文件。然后,我只在多个独立的持久句柄上使用只读 CURLOPT_COOKIEFILE。

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

注意:在我的情况下,多个调用是在一个 while 循环中,并且我在 shell 中使用 PHP。会话 cookie 值加上浏览器类型限制了可用连接的数量,我想要使用每个会话的最大连接数。
-8
romet
9 年前
/*
示例值
url - 'http://example.com'
fields - 数组('var' => 'value'),或者为空
auth - 'user:password',或者为空
by romet, 4.20.2015
*/
function 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.0.1");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 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, CURLAUTH_BASIC);
}

if($fields){
$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 = substr($response, 0, $header_size);
$body = substr($response, $header_size);

$header_rows = explode(PHP_EOL, $header_string);
$header_rows = array_filter($header_rows, trim);
foreach((array)$header_rows as $hr){
$colonpos = strpos($hr, ':');
$key = $colonpos !== false ? substr($hr, 0, $colonpos) : (int)$i++;
$headers[$key] = $colonpos !== false ? trim(substr($hr, $colonpos+1)) : $hr;
}
foreach((array)$headers as $key => $val){
$vals = explode(';', $val);
if(count($vals) >= 2){
unset($headers[$key]);
foreach($vals as $vk => $vv){
$equalpos = strpos($vv, '=');
$vkey = $equalpos !== false ? trim(substr($vv, 0, $equalpos)) : (int)$j++;
$headers[$key][$vkey] = $equalpos !== false ? trim(substr($vv, $equalpos+1)) : $vv;
}
}
}
//print_rr($headers);
curl_close($curl);
return array($body, $headers);
}

list($d['body'], $d['headers']) = curl2('http://google.com', array(q => '123'));
//POST to google.com with POST var "q" as "123"

echo '<pre>';
print_r($d);

---------

OUTPUT

Array
(
[headers] => Array
(
[0] => HTTP/1.1 405 Method Not Allowed
[Allow] => GET, HEAD
[Date] => Mon, 20 Apr 2015 22:20:10 GMT
[Server] => gws
[Content-Length] => 1453
[X-Frame-Options] => SAMEORIGIN
[Alternate-Protocol] => 80:quic,p=1
[Content-Type] => Array
(
[0] => text/html
[charset] => UTF-8
)

[X-XSS-Protection] => Array
(
[1] => 1
[mode] => block
)

)

[body] => <!DOCTYPE html>...etc

)
-6
yann at ykweyer dot fr
8 年前
如果你需要使用 CURL 发送一个文件数组(典型情况:POST 变量到 REST API),在 POSTFIELD 中使用 CURLFiles 数组将不起作用。你必须根据要发送的文件数量在 postfield 中设置多个变量

<?php
// 不会生效:
$postfields = array(
'files' => array(
new
CURLFile($path1),
new
CURLFile($path2),
//...
)
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);

// 相反,请使用:
$postfields = array(
'files[0]' => new CURLFile($path1),
'files[1]' => new CURLFile($path2),
//...
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
?>
-6
user at gmail dot com
5 年前
评分由 FFBE subreddit 的 Discord 维护。新手问题以及询问某个单位是否强大的问题,请前往 .. http://ffbeunitranking.com/ 询问。
-10
admin at jeremyzaretski dot com
15 年前
我想要创建一个脚本,充当外部服务器和内部服务器之间的桥梁,其中内部服务器没有连接到互联网,但拥有连接到外部服务器的用户所需的信息。我突发奇想,可以使用 curl 从外部服务器连接到内部服务器(使用请求变量发送查询),并返回文件服务器返回的所有内容(数据和标头)。

由于 curl_exec 不喜欢我的 CURLOPT_HEADERFUNCTION 函数直接转储标头,导致分段错误和崩溃让我感到抓狂

<?php
function Duplicate_Header($curl, $header)
{
header($header);
return
strlen($header);
}
?>

... 我尝试(突发奇想)复制和修剪标头,并将复制的标头传递给标头函数...

<?php
function Duplicate_Header($curl, $header)
{
$duplicate = trim($header);
header($duplicate);
return
strlen($header);
}
?>

它运行得很好。我不知道这是否是 PHP4 的一些怪癖,还是我缺乏对 curl 和标头函数工作原理的理解。
-11
politikos at live dot com
6 年前
我无法读取这个网站。

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

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

我收到的只有这个响应

"正在检查您的浏览器,然后再访问 jornalggn.com.br。

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

请等待最多 5 秒…"

有什么建议,如何使用 php_curl 解决这个问题
提前感谢
--DJ
-6
Williamexori
1 年前
全球网站 <a href=https://ccccc.sb/>кардинг 论坛</a>
-14
mkucera66 at seznam dot cz
10 年前
注意,cURL 支持(默认启用,正常)是 wiki 门户网站的收集扩展安装和配置的先决条件。
-6
Donovannaply
1 年前
<a href=https://omg.omgomgdeep.com/>омг oniion</a> - omg tor, omg omg darkmarket 论坛
-18
madhouse-network at hotmail dot com
13 年前
curl 似乎无法与 SSL TLS(FTPES)一起使用

它会抛出以下错误

(1) Protocol ftpes not supported or disabled in libcurl
-5
Lloydtig
1 年前
<a href=https://xn--mga-sb-bva.com/>мега тор</a> - mega 镜像工作,mega gl
-5
Jacobtwemi
1 年前
<a href=http://pf-rs.ru/>Битумовозы Новый Уренгой</a> - 石油产品处理,新乌连戈伊的油罐车
-16
cikemic at mailtrix dot net
6 年前
读完这篇文章后,我只有一个词从嘴里蹦出来,那就是“哇”。这篇文章帮助我获得了一些新知识。所以感谢您与我们分享您的宝贵见解。
http://bestfrontandreardashcam.com/
-25
arturo at midnightvip dot com
11 年前
嗨,我修改了 PHP 5 的脚本。我还添加了对服务器身份验证的支持,并修复了脚本中的一些小错误。

<?php
class mycurl {
protected
$_useragent = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1';
protected
$_url;
protected
$_followlocation;
protected
$_timeout;
protected
$_maxRedirects;
protected
$_cookieFileLocation = './cookie.txt';
protected
$_post;
protected
$_postFields;
protected
$_referer ="http://www.midnightvip.com";

protected
$_session;
protected
$_webpage;
protected
$_includeHeader;
protected
$_noBody;
protected
$_status;
protected
$_binaryTransfer;
public
$authentication = 0;
public
$auth_name = '';
public
$auth_pass = '';

public function
useAuth($use){
$this->authentication = 0;
if(
$use == true) $this->authentication = 1;
}

public function
setName($name){
$this->auth_name = $name;
}
public function
setPass($pass){
$this->auth_pass = $pass;
}

public function
__construct($url,$followlocation = true,$timeOut = 30,$maxRedirecs = 4,$binaryTransfer = false,$includeHeader = false,$noBody = false)
{
$this->_url = $url;
$this->_followlocation = $followlocation;
$this->_timeout = $timeOut;
$this->_maxRedirects = $maxRedirecs;
$this->_noBody = $noBody;
$this->_includeHeader = $includeHeader;
$this->_binaryTransfer = $binaryTransfer;

$this->_cookieFileLocation = dirname(__FILE__).'/cookie.txt';

}

public function
setReferer($referer){
$this->_referer = $referer;
}

public function
setCookiFileLocation($path)
{
$this->_cookieFileLocation = $path;
}

public function
setPost ($postFields)
{
$this->_post = true;
$this->_postFields = $postFields;
}

public function
setUserAgent($userAgent)
{
$this->_useragent = $userAgent;
}

public function
createCurl($url = 'nul')
{
if(
$url != 'nul'){
$this->_url = $url;
}

$s = curl_init();

curl_setopt($s,CURLOPT_URL,$this->_url);
curl_setopt($s,CURLOPT_HTTPHEADER,array('Expect:'));
curl_setopt($s,CURLOPT_TIMEOUT,$this->_timeout);
curl_setopt($s,CURLOPT_MAXREDIRS,$this->_maxRedirects);
curl_setopt($s,CURLOPT_RETURNTRANSFER,true);
curl_setopt($s,CURLOPT_FOLLOWLOCATION,$this->_followlocation);
curl_setopt($s,CURLOPT_COOKIEJAR,$this->_cookieFileLocation);
curl_setopt($s,CURLOPT_COOKIEFILE,$this->_cookieFileLocation);

if(
$this->authentication == 1){
curl_setopt($s, CURLOPT_USERPWD, $this->auth_name.':'.$this->auth_pass);
}
if(
$this->_post)
{
curl_setopt($s,CURLOPT_POST,true);
curl_setopt($s,CURLOPT_POSTFIELDS,$this->_postFields);

}

if(
$this->_includeHeader)
{
curl_setopt($s,CURLOPT_HEADER,true);
}

if(
$this->_noBody)
{
curl_setopt($s,CURLOPT_NOBODY,true);
}
/*
if($this->_binary)
{
curl_setopt($s,CURLOPT_BINARYTRANSFER,true);
}
*/
curl_setopt($s,CURLOPT_USERAGENT,$this->_useragent);
curl_setopt($s,CURLOPT_REFERER,$this->_referer);

$this->_webpage = curl_exec($s);
$this->_status = curl_getinfo($s,CURLINFO_HTTP_CODE);
curl_close($s);

}

public function
getHttpStatus()
{
return
$this->_status;
}

public function
__tostring(){
return
$this->_webpage;
}
}
?>
-8
AnthonyDrips
1 年前
<a href=https://torplanets.com/>mega 暗网</a> - 海怪链接洋葱,海怪工作镜像
-11
Edwardlam
1 年前
<a href=https://777gaminator-slots.com>如何 在在线赌场老虎机中获胜</a> - 在线赌场是否真的可以赚钱,免费玩赌博游戏无需注册
To Top