不要忘记 curl_close($ch); 即使 curl_errno($ch) != 0
因为如果你不这样做 - 在 Windows 上这将产生 Windows 错误报告(程序意外终止)
不要忘记 curl_close($ch); 即使 curl_errno($ch) != 0
因为如果你不这样做 - 在 Windows 上这将产生 Windows 错误报告(程序意外终止)
这是一个使用 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>
注意,如果您需要获取/设置 Curl 对象的唯一句柄,则可能需要为每个实例使用 CURL_PRIVATE 属性
https://php.net/manual/en/function.curl-setopt.php
我花了相当长的时间才弄清楚如何让 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
警告 PHP 5 用户:如果在连接错误时尝试使用 `curl_getinfo` 获取 `CURLINFO_CONTENT_TYPE`,PHP 将会发生核心转储(coredump)。我已经将此问题告知了 Curl 团队,希望能尽快修复。请务必先检查错误,然后再获取此数据。
对于任何尝试使用 cURL 向使用图像作为提交按钮的 ASP/ASPX 页面提交数据的人。
确保在 POST 字段中包含 'button_name.x' 和 'button_name.y'。PHP 将这些字段命名为 'button_name_x' 和 'button_name_y',而 ASP 使用的是点号。
此外,如上所述,请确保在您的 POST 请求中包含 '__VIEWSTATE' 输入字段。
尽管已经注意到,在通过 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);
?>
在最近版本的 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` 中,而操作本身将保持完全静默。
这是一个使用 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>