如何将Chrome请求重复为curl命令?

12

为了进行一些自动化测试,我需要记录Chrome发送的请求,然后在curl命令中重复它们。我开始查看如何实现...


这里还有另一种实现方式:https://github.com/mattcg/har-to-curl - Salix alba
3个回答

9

我的做法是:

  1. 在开发者工具打开时访问网站。
  2. 发送请求,确保在控制台中进行记录。
  3. 右键单击请求,选择“保存为带内容的HAR文件”并保存到文件中。
  4. 然后运行以下php脚本来解析HAR文件并输出正确的curl命令:

脚本:

<?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";
}

5
不知道是从哪个版本开始添加了这个功能,但Chrome现在提供了一个“另存为cURL”选项:

enter image description here

您可以在开发者工具的“网络”选项卡中访问此功能,并右键单击XHR请求。

在我的情况下,我需要复制许多请求,所以我不想逐个复制为curl。因此,我正在寻找批量复制解决方案。 - ElyashivLavi
你可以将所有内容复制为cURL。 - Sasha Pachev
然而,在我的情况下,我需要运行一个用户收集的HAR文件。我本可以让他将所有内容保存为cURL格式,但我更喜欢HAR格式,因为它更容易解析和分析。 - Sasha Pachev

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);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接