如何使用PHP / cURL模拟浏览器表单POST方法 [英] How to simulate browser form POST method using PHP/cURL
问题描述
我试图使用PHP / cURL使用 POST
方法来模拟浏览器。
当我看到这个Http头部,它显示 Content-Type:multipart / form-data
。
I'm trying to simulate browser with POST
method using PHP/cURL.
When I looked at that live Http header it shows Content-Type: multipart/form-data
.
我在互联网上检查过,建议当自定义标题时cURL会发送 multipart / form-data
指定为 Content-Type:multipart / form-data
。
I checked on the internet where it was suggested that cURL will send multipart/form-data
when a custom headers is specified to Content-Type: multipart/form-data
.
$headers = array(
'Content-Type' => 'multipart/form-data; boundary='.$boundary
);
这对我来说不起作用,当我print_r(curl_getinfo())它显示
This didn't work for me either when I print_r(curl_getinfo()) it showed
[content_type] => text/html; charset=UTF-8
这意味着cURL发送了一个默认标题
Which means cURL sent a default headers
我还读取了使用cURL发送/上传文件将导致数据以 multipart / form-data
发送。我创建了一个文件curl上传,但再次当我运行 curl_getinfo
我得到 [content_type] => text / html; charset = UTF-8
I also read that sending/uploading a file with cURL will cause data to be send as multipart/form-data
. I created a file which curl uploaded but again when I ran curl_getinfo
I got [content_type] => text/html; charset=UTF-8
$data_array = array("field" => "@c:\file_location.txt");
我还试图读取一个文件内容,以便发送的唯一的东西将是内容不附着文件,这对我没有工作curl_getinfo显示 [content_type] => text / html; charset = UTF-8
。
I also tried to read a file content so that the only thing sent would be content NOT ATTACHED FILE but this didn't work for me curl_getinfo shows [content_type] => text/html; charset=UTF-8
.
$data_array = array("field" => "<c:\file_location.txt"); // note @ replaced with <
这里有我想念的吗?
这是引荐者
url
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);
?>
推荐答案
码。是到底是什么期望发生?还是别的什么?
You've not osted a coherent/consistent stream of code. Is the bit at the end what you expect to happen? Or something else?
您说它没有工作 - 对不起,但我们需要一个很多您诊断问题。
You say "it didn't work" - sorry, but we need a lot more information to be able to help you diagnose the problem.
-
是否有错误讯息?
Was there an error message?
您尝试将文件张贴到什么位置?
What are you trying to post the file to?
接收URL是否与HTTP表单一起使用?
Does the receiving URL work with an HTTP form?
您可以提供一个合作表单的示例吗?
Can you provide an example of the form it works with?
您是否在接收端控制代码?
Do you control the code at the receiving end?
您如何知道它不工作?
How do you know it "doesn't work"?
您收到错误讯息吗?如果是,什么?
Do you get an error message? If so, what?
操作应该很简单:
<?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);
?>
坏的路径可能exaplin为什么curl_getinfo()不告诉你期望看到什么 - 实际的数据交换可能会更有帮助。
C。
The bad path might exaplin why curl_getinfo() is not telling you what you expect to see - looking at the actual data exchange might be a lot more helpful. C.
这篇关于如何使用PHP / cURL模拟浏览器表单POST方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!