我正在尝试使用PHP / cURL使用 POST
方法模拟浏览器 . 当我看着那个直播的Http Headers 时,它显示了 Content-Type: multipart/form-data
.
我在互联网上检查了当为 Content-Type: multipart/form-data
指定自定义标头时,cURL将发送 multipart/form-data
.
$headers = array(
'Content-Type' => 'multipart/form-data; boundary='.$boundary
);
当我显示print_r(curl_getinfo())时,这对我不起作用
[content_type] => text/html; charset=UTF-8
这意味着cURL发送了默认标头
我还读到使用cURL发送/上传文件将导致数据作为 multipart/form-data
发送 . 我创建了一个curl上传的文件但是当我运行 curl_getinfo
时我得到 [content_type] => text/html; charset=UTF-8
$data_array = array("field" => "@c:\file_location.txt");
我还尝试读取文件内容,以便发送的唯一内容是内容不附加文件,但这对我不起作用curl_getinfo显示 [content_type] => text/html; charset=UTF-8
.
$data_array = array("field" => "<c:\file_location.txt"); // note @ replaced with <
我想念这里的东西吗?
这是引用者
网址
POST somepath HTTP/1.1
Host: www(dot)domain(dot)com
User-Agent: Mozilla/5.0 (Windows) Gecko/13081217 Firefox/3
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: url/some-file.php
Content-Type: multipart/form-data; boundary=--------------------------$boundary
Content-Length: $some_number
----------------------------$boundary
Content-Disposition: form-data; name="$some_Value1"
$some_text1
----------------------------$boundary
Content-Disposition: form-data; name="$some_Value2"
$some_text2
----------------------------$boundary
Content-Disposition: form-data; name="$some_Value3"
$some_text3
----------------------------$boundary
Content-Disposition: form-data; name="$some_Value4"
$some_text4
----------------------------$boundary
Content-Disposition: form-data; name="$some_Value5"
$some_text5
----------------------------$boundary
Content-Disposition: form-data; name="$some_Value6"
$some_text6
----------------------------$boundary
Content-Disposition: form-data; name="$some_Value7"
$some_text7
----------------------------$boundary
Content-Disposition: form-data; name="$some_Value8"
$some_text8
----------------------------$boundary
Content-Disposition: form-data; name="$some_Value9"
----------------------------$boundary
Content-Disposition: form-data; name="$some_Value10"
----------------------------$boundary--
这是一段代码 .
<?
//Include files
set_time_limit(0);
include'body.php';
include'keyword.php';
include'bio.php';
include'summary.php';
include'headline.php';
include'category.php';
include'spin.php';
include'random-text.php';
$category = category();
$headline = headline() ;
$summary = summary();
$keyword = keyword();
$body = body();
$bio = bio();
$target="url";
$ref ="url_ref";
$c = "Content-Disposition: form-data; name=";
$boundary = "---------------------------".random_text();
$category = category();
$headline = headline() ;
$summary = summary();
$keyword = keyword();
$body = body();
$bio = bio();
// emulating content form as it appears on livehttp header
$data = "\r\n".$boundary."\r\n".$c."\"pen_id\"\r\n\r\n".$Auth_id."\r\n".$boundary."\r\n".$c."\"cat_id\"\r\n\r\n".category()."\r\n".$boundary."\r\n".$c."\"title\"\r\n\r\n".headline()."\r\n".$boundary."\r\n".$c."\"meta_desc\"\r\n\r\n".summary()."\r\n".$boundary."\r\n".$c."\"meta_keys\"\r\n\r\n".keyword()."\r\n".$boundary."\r\n".$c."\"content\"\r\n\r\n".body()."\r\n".$boundary."\r\n".$c."\"author_bio\"\r\n\r\n".bio()."\r\n".$boundary."\r\n".$c."\"allow_comments\"\r\n\r\ny\r\n".$boundary."\r\n".$c."\"id\"\r\n\r\n\r\n".$boundary."\r\n".$c."\"action\"\r\n\r\n\r\n".$boundary."--\r\n";
// inserting content into a file
$file = "C:\file_path.txt";
$fh = fopen($file, 'w+') or die("Can't open file");
fwrite($fh,$data);
fclose($fh);
// pulling out content from a file as multipart/form-data
$data_array = array ("field" => "<C:\file_path.txt");
$headers = array (
'POST /myhome/article/new HTTP/1.1',
'Host: url',
'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.20) Gecko/20081217 Firefox/2.0.0.20 (.NET CLR 3.5.30729)',
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9;q=0.8',
'Accept-Language: en-us,en;q=0.5',
'Accept-Encoding: gzip,deflate',
'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7',
'Keep-Alive: 300',
'Connection: keep-alive',
'Content-Type: multipart/form-data; boundary='.$boundary,
'Content-Length: '.strlen($data),
);
# Create the cURL session
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $target); // Define target site
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_HEADER, $headers); // No http head
//curl_setopt($ch, CURLOPT_REFERER, $ref);
curl_setopt($ch, CURLOPT_NOBODY, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); // Return page in string
curl_setopt($ch, CURLOPT_COOKIEJAR, "c:\cookie\cookies.txt"); // Tell cURL where to write
curl_setopt($ch, CURLOPT_COOKIEFILE, "c:\cookie\cookies.txt"); // Tell cURL which cookies
//curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, "$data_array");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); // Follow redirects
curl_setopt($ch, CURLOPT_MAXREDIRS, 4);
# Execute the PHP/CURL session and echo the downloaded page
$page = curl_exec($ch);
$err = curl_error($ch);
$info =curl_getinfo($ch);
# Close the cURL session
curl_close($ch);
print_r($err);
print_r($info);
?>
2 回答
您没有发布一致的/一致的代码流 . 最后的结果是你期望发生的吗?或者是其他东西?
你说"it didn't work" - 对不起,但是我们需要更多的信息来帮助你诊断问题 .
有错误信息吗?
您要将文件发布到什么内容?
接收URL是否与HTTP表单一起使用?
您能提供一个与其一起使用的表单示例吗?
您是否在接收端控制代码?
你怎么知道它“不起作用”?
您收到错误消息吗?如果是这样,什么?
操作应该如下:
糟糕的路径可能会影响为什么curl_getinfo()没有告诉你你期望看到什么 - 看实际的数据交换可能会更有帮助 . C .
尝试使用PHP中的
exec
来调用COMMAND LINE VERSION OF CURL ..对于上传文件,这对我有用 .
示例:Webform有一个名为'Filedata'的输入框,用于将文件上传到他们的服务器我要上传
myImage.jpg
所以在Linux命令行上,(假设在
myImage.jpg
的文件夹中)如果这样可行,你可以使用类似的东西从php调用它