2024 年 PHP 日本大会

cURL 函数

目录

添加注释

用户贡献的注释 10 条注释

27
Mr.KTO
17 年前
不要忘记 curl_close($ch); 即使 curl_errno($ch) != 0

因为如果你不这样做 - 在 Windows 上这将产生 Windows 错误报告(程序意外终止)
6
helmizz at yahoo dot com
10 年前
这是一个使用 curl 的示例脚本,只需输入 curl_setopt,
例如
curlsetop[0] ==> 名称:CURLOPT_URL;值:http://amazon.com
curlsetop[1] ==> 名称:CURLOPT_RETURNTRANSFER;值:true
curlsetop[2] ==> 名称:CURLOPT_FOLLOWLOCATION;值:true

您可以添加表单输入。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title> 新文档 </title>
<meta name="Generator" content="">
<meta name="Author" content="Helmi Anwar">
<meta name="Keywords" content="">
<meta name="Description" content="">
</head>

<body>

<form method="post" action="">
<table>
<tr class="rowid_add">
<td>curl_setopt [0]</td>
<td>名称:<input type="text" size="50" name="setopt_name[]"></td>
<td>值:<input type="text" size="50" name="setopt_value[]"></td>
</tr>
<tr class="rowid_add">
<td>curl_setopt [0]</td>
<td>名称:<input type="text" size="50" name="setopt_name[]"></td>
<td>值:<input type="text" size="50" name="setopt_value[]"></td>
</tr>
<tr class="rowid_add">
<td>curl_setopt [0]</td>
<td>名称:<input type="text" size="50" name="setopt_name[]"></td>
<td>值:<input type="text" size="50" name="setopt_value[]"></td>
</tr>
<tr>
<td><input type="submit" name="submit_yes" value="执行"></td>
</tr>
</table>
</form>


<?php

function curl_test($setopt_content)
{
$ch = curl_init();
curl_setopt_array($ch, $setopt_content);
$result_data = curl_exec($ch);
curl_close($ch);
return
$result_data;
}

if(
$_REQUEST['submit_yes']=="EXECUTE")
{

foreach (
$_REQUEST['setopt_name'] as $k => $index_content)
{
$value_content=$_REQUEST['setopt_value'][$k];
$index_content =strtoupper($index_content);
eval(
'$index_content = '.$index_content.';');
//echo ($index_content);
if($index_content!='')
{
if(
strtoupper($value_content)=='TRUE')
{
$setopt_content[$index_content]=TRUE;}
elseif(
strtoupper($value_content)=='FALSE')
{
$setopt_content[$index_content]=FALSE;}
else
{
$setopt_content[$index_content]=$value_content;}
}
}

$info=curl_test($setopt_content);

}

?>
<textarea name="result" rows="25" cols="100"><?php echo htmlspecialchars($info);?></textarea>
</body>
</html>
2
匿名用户
3 年前
注意,如果您需要获取/设置 Curl 对象的唯一句柄,则可能需要为每个实例使用 CURL_PRIVATE 属性
https://php.net/manual/en/function.curl-setopt.php
3
simon [at] vhostdirect [dot] co [dot] uk
20 年前
我花了相当长的时间才弄清楚如何让 Curl(带 SSL)、OpenSSL 和 PHP 很好地协同工作。

重新安装 MS-VC7 并编译 OpenSSL 后,最终意识到这没有必要。

如果您像我一样更喜欢 *Nix 系统而不是 Windows,那么您很可能也会遇到类似的问题。

我在简单的谷歌搜索中使用正确的关键词找到了这个。

http://www.tonyspencer.com/journal/00000037.htm

我阅读了它并找到了我的错误。

这只是一小段笔记,我发现它们是关于这个主题最好的,也是最简单的。

不要忘记在您的脚本中添加类似这样的简单行以使其在 Win32 上运行。

<?php
if($WINDIR) curl_setopt($curl, CURLOPT_CAINFO, "c:\\windows\\ca-bundle.crt");
?>

最后说明:ca-bundle.crt 文件位于 Curl 下载中。我将我的存储在 Windows 目录中,Apache/PHP 可以很好地访问它。

祝一切顺利,希望这能有所帮助。

Simon Lightfoot
vHost Direct Limited
3
mikeb[at]xamo[dot]com
20 年前
警告 PHP 5 用户:如果在连接错误时尝试使用 `curl_getinfo` 获取 `CURLINFO_CONTENT_TYPE`,PHP 将会发生核心转储(coredump)。我已经将此问题告知了 Curl 团队,希望能尽快修复。请务必先检查错误,然后再获取此数据。
1
killermonk at REMOVE dot killermonk dot com
17 年前
对于任何尝试使用 cURL 向使用图像作为提交按钮的 ASP/ASPX 页面提交数据的人。

确保在 POST 字段中包含 'button_name.x' 和 'button_name.y'。PHP 将这些字段命名为 'button_name_x' 和 'button_name_y',而 ASP 使用的是点号。

此外,如上所述,请确保在您的 POST 请求中包含 '__VIEWSTATE' 输入字段。
0
Peter X.
16 年前
尽管已经注意到,在通过 HTTP 链接获取文件时,cURL 的性能优于 `file_get_contents` 和 `fopen`,但 cURL 的缺点是它无法一次只读取页面的一部分。

例如,以下代码可能会导致内存限制错误

<?php
$ch
= curl_init("http://www.example.com/reallybigfile.tar.gz");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
$output = curl_exec($ch);

$fh = fopen("out.tar.gz", 'w');
fwrite($fh, $output);
fclose($fh);
?>

而另一方面,这个就不会

<?php
$hostfile
= fopen("http://www.example.com/reallybigfile.tar.gz", 'r');
$fh = fopen("out.tar.gz", 'w');

while (!
feof($hostfile)) {
$output = fread($hostfile, 8192);
fwrite($fh, $output);
}

fclose($hostfile);
fclose($fh);
?>
-3
alidrus at langkah dot com
20 年前
在最近版本的 php 中,`CURLOPT_MUTE` 已(可能)被弃用。任何尝试使用 `curl_setopt()` 设置 `CURLOPT_MUTE` 的操作都会给出类似这样的警告

PHP Notice: Use of undefined constant CURLOPT_MUTE - assumed 'CURLOPT_MUTE' in ....

如果您希望使 cURL 输出静默,请改用以下方法

<?php
curl_setopt
($ch, CURLOPT_RETURNTRANSFER, true);
?>

然后,

<?php
$curl_output
=curl_exec($ch);
?>

cURL 操作的输出将作为字符串存储在 `$curl_output` 中,而操作本身将保持完全静默。
-4
richardkmiller AT gmail
18 年前
注意 URL 中的任何额外空格。URL 中尾随的空格导致我的脚本失败,并显示消息“服务器空回复”。
-3
ciaoandriana8 at gmail dot com
3 年前
这是一个使用 curl 的示例脚本,只需输入 curl_setopt,
例如
curlsetop[0] ==> name : CURLOPT_URL ; value : https://amzn.to/3njlWW6
curlsetop[1] ==> 名称:CURLOPT_RETURNTRANSFER;值:true
curlsetop[2] ==> 名称:CURLOPT_FOLLOWLOCATION;值:true

您可以添加表单输入。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title> 新文档 </title>
<meta name="Generator" content="">
<meta name="Author" content="Helmi Anwar">
<meta name="Keywords" content="">
<meta name="Description" content="">
</head>

<body>

<form method="post" action="">
<table>
<tr class="rowid_add">
<td>curl_setopt [0]</td>
<td>名称:<input type="text" size="50" name="setopt_name[]"></td>
<td>值:<input type="text" size="50" name="setopt_value[]"></td>
</tr>
<tr class="rowid_add">
<td>curl_setopt [0]</td>
<td>名称:<input type="text" size="50" name="setopt_name[]"></td>
<td>值:<input type="text" size="50" name="setopt_value[]"></td>
</tr>
<tr class="rowid_add">
<td>curl_setopt [0]</td>
<td>名称:<input type="text" size="50" name="setopt_name[]"></td>
<td>值:<input type="text" size="50" name="setopt_value[]"></td>
</tr>
<tr>
<td><input type="submit" name="submit_yes" value="执行"></td>
</tr>
</table>
</form>

<?php

function curl_test($setopt_content)
{
$ch = curl_init();
curl_setopt_array($ch, $setopt_content);
$result_data = curl_exec($ch);
curl_close($ch);
return
$result_data;
}

if(
$_REQUEST['submit_yes']=="EXECUTE")
{

foreach (
$_REQUEST['setopt_name'] as $k => $index_content)
{
$value_content=$_REQUEST['setopt_value'][$k];
$index_content =strtoupper($index_content);
eval(
'$index_content = '.$index_content.';');
//echo ($index_content);
if($index_content!='')
{
if(
strtoupper($value_content)=='TRUE')
{
$setopt_content[$index_content]=TRUE;}
elseif(
strtoupper($value_content)=='FALSE')
{
$setopt_content[$index_content]=FALSE;}
else
{
$setopt_content[$index_content]=$value_content;}
}
}

$info=curl_test($setopt_content);

}

?>
<textarea name="result" rows="25" cols="100"><?php echo htmlspecialchars($info);?></textarea>
</body>
</html>
To Top