curlpost文件php
‘壹’ php curl post 上传文件 接收文件 $_FILES 为空 是服务器配置问题吗还是什么原因
原因找到了。就是$data['img']="@/tmp/1.jpg";这句话
一定要用绝对路径。
$ch=curl_init();
define('_ROOT',str_replace("\",'/',dirname(__FILE__)));
$data['img']="@"._ROOT."/tmp/1.jpg";
curl_setopt($ch,CURLOPT_URL,"http://www.biubiu.com/huahua.php");
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
$result=curl_exec($ch);
curl_close($ch);
echo$result;
‘贰’ PHP相关:用CURL POST文件后,接收页面只有$_POST数据,$_FILES为空
'file' => @'E:/WEB/PHP/tools/grab/qie.jpg'改为
'file' =>'@E:/WEB/PHP/tools/grab/qie.jpg' 试试
‘叁’ php,用curl写个post登陆并取回cookies的代码
要在文件中保存COOKIE的信息,你的curl_setopt($ch, CURLOPT_COOKIEJAR,$cookie_file);中的$cookie_file必须是要保存cookie信息的文件名,最最关键的一点,这个文件名是必须要带绝对路径,否则是不行的,如果文件带上绝对路径的话,会在文件中以Netscape格式保存所有的cookie信息。
还有一个需要说明的,COOKIE必须指定有效期,如果没有指定有效期的话,默认的浏览器关闭COOKIE就失效。这种COOKIE信息在内存中存放,不会写入硬盘的。
这两个方面你都需要考虑。用绝对路径,保存一个长效的COOKIE,肯定可以成功!
‘肆’ php使用curl的post方法字符串和数组传值的区别
在PHP手册的curl_setopt函数中,关于CURLOPT_POSTFIELDS有如下描述:
全部数据使用HTTP协议中的"POST"操作来发送。
要发送文件,在文件名前面加上@前缀并使用完整路径。(5.5+建议用CURLFile)
这个参数可以通过urlencoded后的字符串类似'para1=val1¶2=val2&...'
或使用一个以字段名为键值,字段数据为值的数组。
如果value是一个数组,Content-Type头将会被设置成multipart/form-data。
因此,这两种传值方式是有所区别的。
当然,可以通过CURLOPT_HTTPHEADER指定Content-Type。
更多PHPcURL内容,请参考我的博客《PHPcURL实现模拟登录与采集使用方法详解教程》
‘伍’ php Curl的get和post方法
get方法
function http_get($url)
{
$oCurl = curl_init();
if (stripos($url, "https://") !== FALSE) {
curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, FALSE);
//curl_setopt($oCurl, CURLOPT_SSLVERSION, 1);
//CURL_SSLVERSION_TLSv1
}
curl_setopt($oCurl, CURLOPT_URL, $url);
curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1);
$sContent = curl_exec($oCurl);
$aStatus = curl_getinfo($oCurl);
curl_close($oCurl);
if (intval($aStatus["http_code"]) == 200) {
return $sContent;
} else {
return false;
}
}
post方法
// curlpost请求
function http_post($url, $data = NULL, $json = false)
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
if (!empty($data)) {
if ($json && is_array($data)) {
$data = json_encode($data);
}
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
if ($json) { //发送JSON数据
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt(
$curl,
CURLOPT_HTTPHEADER,
array(
'Content-Type: application/json; charset=utf-8',
'Content-Length:' . strlen($data)
)
);
}
}
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$res = curl_exec($curl);
$errorno = curl_errno($curl);
if ($errorno) {
return array('errorno' => false, 'errmsg' => $errorno);
}
curl_close($curl);
return json_decode($res, true);
}
‘陆’ 修改php代码使用curl实现POST
POST提交是要浏览器提交客户端才能有效果,服务器上使用CURL提交后,浏览器使用者看不见任何效果的。
对于现在的架构,我认为应该PHP输出js代码POST提交,例如:
header("location:$fileurl");
语句修改为:
echo<<<END
<formname=form1method=postaction=play.php>
<inputtype=hiddenname=fileurlvalue='$fileurl'>
</form>
<javascriptlanguage=javascript>
form1.submit();
</javascript>
END;