如何使用PHP / cURL模拟浏览器表单POST方法
我试图使用PHP / cURL来使用POST
方法来模拟浏览器。 当我看着那个活的Http头时,它显示了Content-Type: multipart/form-data
。
我在网上查,其中有人提出,卷曲将发送multipart/form-data
时候自定义标题被指定为Content-Type: 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
[content_type] => text/html; charset=UTF-8
$data_array = array("field" => "@c:file_location.txt");
我还尝试读取文件内容,以便发送的唯一内容是内容不附带的文件,但这对我无效curl_getinfo shows [content_type] => text/html; charset=UTF-8
[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 = "rn".$boundary."rn".$c.""pen_id"rnrn".$Auth_id."rn".$boundary."rn".$c.""cat_id"rnrn".category()."rn".$boundary."rn".$c.""title"rnrn".headline()."rn".$boundary."rn".$c.""meta_desc"rnrn".summary()."rn".$boundary."rn".$c.""meta_keys"rnrn".keyword()."rn".$boundary."rn".$c.""content"rnrn".body()."rn".$boundary."rn".$c.""author_bio"rnrn".bio()."rn".$boundary."rn".$c.""allow_comments"rnrnyrn".$boundary."rn".$c.""id"rnrnrn".$boundary."rn".$c.""action"rnrnrn".$boundary."--rn";
// 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:cookiecookies.txt"); // Tell cURL where to write
curl_setopt($ch, CURLOPT_COOKIEFILE, "c:cookiecookies.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);
?>
您尚未发布连贯/一致的代码流。 这一点到底是你期望发生的? 或者是其他东西?
你说“没有工作” -对不起,但我们需要更多的信息,能够帮助您诊断问题。
有没有错误信息?
你想把文件发布到哪里?
接收URL是否与HTTP表单一起使用?
你能提供一个与它一起使用的表单的例子吗?
你是否在接收端控制代码?
你怎么知道它“不起作用”?
你有错误信息吗? 如果是这样,什么?
操作应该如下简单:
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $THE_REMOTE_URL_YOU_ARE_POSTING_TO);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, array(
"field" => "@c:file_location.txt", // note the double when used within double quotes
'a_number' => 12345.
'a_string' => "hello world"
));
$response = curl_exec($ch);
?>
糟糕的道路可能不是为什么curl_getinfo()不告诉你你期望看到什么 - 看看实际的数据交换可能会更有帮助。 C。
尝试使用PHP的exec
来调用COMMAND LINE VERSION OF CURL ..
对于上传文件,这对我来说是个诀窍。
示例:Webform具有名称为'Filedata'的输入框,用于将文件上传到其服务器上我想上传myImage.jpg
因此,在Linux命令行上(假设在myImage.jpg
的文件夹中)
curl -F "Filedata = @myImage.jpg;" 'http://siteyoursubmittingto.php'
如果这个工作,你可以使用类似的东西来调用这个
exec ("curl -F 'Filedata = @myImage.jpg;' 'http://siteyoursubmittingto.php'");
链接地址: http://www.djcxy.com/p/48903.html
上一篇: How to simulate browser form POST method using PHP/cURL