如何以curl命令重复Chrome请求?

时间:2015-09-17 07:40:03

标签: php google-chrome httprequest har

对于我所做的一些自动化测试,我必须记录来自Chrome的请求,然后在curl命令中重复它们。 我开始检查如何做...

3 个答案:

答案 0 :(得分:4)

我这样做的方式是:

  1. 在开发人员工具打开时访问网站。
  2. 发出请求,确保他们已登录控制台。
  3. 右键点击请求,选择'另存为内容'并保存到文件中。
  4. 然后运行以下php脚本来解析HAR文件并输出正确的卷发:
  5. 脚本:

    <?php    
    $contents=file_get_contents('/home/elyashivl/har.har');
    $json = json_decode($contents);
    $entries = $json->log->entries;
    foreach ($entries as $entry) {
      $req = $entry->request;
      $curl = 'curl -X '.$req->method;
      foreach($req->headers as $header) {
        $curl .= " -H '$header->name: $header->value'";
      }
      if (property_exists($req, 'postData')) {
        # Json encode to convert newline to literal '\n'
        $data = json_encode((string)$req->postData->text);
        $curl .= " -d '$data'";
      }
      $curl .= " '$req->url'";
      echo $curl."\n";
    }
    

答案 1 :(得分:1)

在ElyashivLavi的代码的基础上,我添加了一个文件名参数,从文件中读取时进行错误检查,将curl置于详细模式下,并禁用Accept-encoding请求标头,通常会导致返回压缩输出使其难以调试以及自动执行curl命令:

<?php

function bail($msg)
{
    fprintf(STDERR, "Fatal error: $msg\n");
    exit(1);
}

global $argv;

if (count($argv) < 2)
    bail("Missing HAR file name");

$fname = $argv[1];
$contents=file_get_contents($fname);

if ($contents === false)
    bail("Could not read file $fname");

$json = json_decode($contents);
$entries = $json->log->entries;

foreach ($entries as $entry)
{
    $req = $entry->request;
    $curl = 'curl --verbose -X '.$req->method;

    foreach($req->headers as $header)
    {
        if (strtolower($header->name) === "accept-encoding")
            continue; // avoid gzip response
        $curl .= " -H '$header->name: $header->value'";
    }

    if (property_exists($req, 'postData'))
    {
        # Json encode to convert newline to literal '\n'
        $data = json_encode((string)$req->postData->text);
        $curl .= " -d '$data'";
    }

    $curl .= " '$req->url'";
    echo $curl."\n";
    system($curl);
}

答案 2 :(得分:0)

不知道他们在哪个版本中添加了此功能,但Chrome现在提供了“另存为cURL”选项:

enter image description here

您可以访问开发人员工具的“网络”标签,然后右键单击XHR请求来访问此