当前位置: 首页 > 知识库问答 >
问题:

PHP卷曲没有得到相同的响应作为小提琴手

公良奇
2023-03-14

这是我的PHP代码:

$source = $_POST['source'];
$destination = $_POST['destination'];
$class = $_POST['class'];
$day = $_POST['day'];
$month = $_POST['month'];

$data = array(
    'lccp_src_stncode_dis' => $source,
    'lccp_dstn_stncode' => $destination,
    'lccp_classopt' => $class,
    'lccp_day' => $day,
    'lccp_month' => $month
);

# Create a connection
$url = 'data as per raw req ';
$ch = curl_init($url);

echo $ch." <br>";

# Form data string
$postString = http_build_query($data);

echo $postString;
$header = array (   
            'Host' => 'data as per raw req '
            'Connection'=> 'keep-alive',
            'Content-Length'=> '180',
            'Cache-Control'=> 'max-age=0',
            'Accept'=> 'text/html',
            'Origin'=> 'data as per raw req ',
            'User-Agent' => '',
            'Content-Type' => 'application/x-www-form-urlencoded',
            'Referer': 'data as per raw req '
            'Accept-Encoding'=> '',
            'Accept-Language' => 'en-US,en;q=0.8'

    );

# Setting options
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postString);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
//# Get the response
curl_setopt($ch, CURLOPT_POSTFIELDS, 
$response = curl_exec($ch);
curl_close($ch);

#print response
echo "
$response
";

从接收表单数据

<html>
    <form method="post" action="poster.php">
        <table>
            <tr><td>source:</td><td><input type="text" name="source"></td></tr>
            <tr><td>destination:</td><td><input type="text" name="destination"></td></tr>
            <tr><td>day:</td><td><input type="text" name="day"></td></tr>
            <tr><td>month:</td><td><input type="text" name="month"></td></tr>
            <tr><td>class:</td><td><input type="text" name="class"></td></tr>
            <tr><td><input type="submit" name="submit" value="Submit"></td>
            <td><input type="reset" name="reset" value="Reset"></td></tr>
        </table>
</form>
</html> 

这是原始请求

POST http://www.indianrail.gov.in/cgi_bin/inet_srcdest_cgi_date.cgi HTTP/1.1
Host: www.indianrail.gov.in
Connection: keep-alive
Content-Length: 91
Cache-Control: max-age=0
Accept: text/html
Origin: **<---modified since I can't post more than 2 links
User-Agent: 
Content-Type: application/x-www-form-urlencoded
Referer: ** <---modified since I can't post more than 2 links
Accept-Encoding: 
Accept-Language: en-US,en;q=0.8
lccp_src_stncode_dis=ndls&lccp_dstn_stncode=HYB&lccp_classopt=SL&lccp_day=26&lccp_month=6

Fiddler从cgi中给出了适当的响应,而php脚本只是显示html容器,我已经被困了一个多小时了!请帮忙
编辑:详细信息的输出:

* Adding handle: conn: 0x2cab910
* Adding handle: send: 0
* Adding handle: recv: 0
* Curl_addHandleToPipeline: length: 1
* - Conn 3 (0x2cab910) send_pipe: 1, recv_pipe: 0
* About to connect() to www.indianrail.gov.in port 80 (#3)
*   Trying 203.176.113.78...
* Connected to www.indianrail.gov.in (203.176.113.78) port 80 (#3)
> POST /cgi_bin/inet_srcdest_cgi_date.cgi HTTP/1.1
Host: www.indianrail.gov.in
Accept: */*
http://www.indianrail.gov.in
http://www.indianrail.gov.in/know_Station_Code.html
Content-Length: 89
Content-Type: application/x-www-form-urlencoded
* upload completely sent off: 89 out of 89 bytes
< HTTP/1.1 200 OK
< Date: Fri, 27 Jun 2014 05:38:17 GMT
* Server Apache/2.2.15 (Red Hat) is not blacklisted
< Server: Apache/2.2.15 (Red Hat)
< Connection: close
< Transfer-Encoding: chunked
< Content-Type: text/html; charset=UTF-8
< 
* Closing connection 3

^题外话:为什么这次它只让我发布链接,它应该被识别为链接?

此外,我会在fiddler中比较会话,但fiddler会在本地主机上向我自己的应用程序显示请求,而不是从我的应用程序向印度铁路网站显示请求。屏幕截图:无需担心,没有足够的REP
编辑:如果有人能告诉我如何使用http_request2发出此请求,我会很高兴的
我已经发布了确切的原始请求,在评论中使用fiddler为我提供了所需的输出,所以不,我没有遗漏任何身份验证和cookie头等等

共有1个答案

秋博容
2023-03-14

标题不能作为关联数组输入,这是错误的:

$header = array (   
            'Host' => 'data as per raw req '
            'Connection'=> 'keep-alive',
            'Content-Length'=> '180',
            'Cache-Control'=> 'max-age=0',
            'Accept'=> 'text/html',
            'Origin'=> 'data as per raw req ',
            'User-Agent' => '',
            'Content-Type' => 'application/x-www-form-urlencoded',
            'Referer': 'data as per raw req '
            'Accept-Encoding'=> '',
            'Accept-Language' => 'en-US,en;q=0.8'
             );

正确的方法:

$header = array (   
            'Host:*data as per raw req* '
            'Connection:keep-alive',
            'Content-Length:180',
            'Cache-Control:max-age=0',
            'Accept:text/html',
            'Origin:*data as per raw req* ',
            'User-Agent:',
            'Content-Type:application/x-www-form-urlencoded',
            'Referer:*data as per raw req* '
            'Accept-Encoding:',
            'Accept-Language:en-US,en;q=0.8'
             );

甚至我使用的关联数组中输入的数据也被格式化为url编码的post字符串,显然所有内容都必须像原始http请求一样输入。cURL实际上不做任何格式化。

 类似资料:
  • 我使用spring Boot创建了压缩响应的配置。下面是我的配置。 问题是所有的响应都有header[Content-Encoding gzip],即使响应大小小于min响应大小,默认为2048字节。

  • 问题内容: 我想先查看请求中的帖子字段,然后再发送。(出于调试目的)。 我正在使用的PHP库(类)已经制作(不是我本人制作的),所以我试图理解它。 据我所知,它用于设置不同的选项(如标头等),然后用于发送请求。 关于如何查看正在发送哪些帖子字段的想法? 问题答案: 您可以启用以下选项: 当被设置时,输出写入 STDERR 或使用指定的文件。输出非常有用。 您还可以使用tcpdump或wirehar

  • 我不需要任何帮助w/代码,这是非常直接的,只是需要一个解释w/Fiddler 当单击时,一个命令会触发到一个php页面(没问题,可以用MVC Actionmethod调用复制同样的事情)。然而,当我查看Fiddler的原始视图时,我看到了所有相关的样式属性。没有打开/关闭样式标签,它们也没有嵌入到网页中,而是将jQuery追加到html头标签,指向包含我在Fiddler中观察到的样式属性的新样式表

  • 主要活动 公共类MainActivity扩展AppCompatActivity{String response; 公共类GetExample{OkHttpClient客户端; Xml文件

  • 更新:问题已解决!AJAX可以工作,但我有函数来测试哪个到控制台日志。函数如下: 在WooCommerce的admin order页面(WooCommerce>Orders>Edit)上,我添加了自定义字段,以便向订单添加自定义费用。我跟随本文添加AJAX,但它不起作用。我成功地注册了jQuery脚本并将其排入队列,并且它在大多数情况下都能正常工作,但是我根本没有收到响应。 在admin orde