如何使用PHP / cURL模拟浏览器表单POST方法 [英] How to simulate browser form POST method using PHP/cURL

查看:168
本文介绍了如何使用PHP / cURL模拟浏览器表单POST方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆