如何将JSON格式HTTP请求文件转换为标准raw原始请求?
awk实现可行性与难度说明
awk完全可以实现该转换需求,难度根据你对JSON格式兼容性的要求有所区分:
- 如果你手上的JSON文件格式和你给出的示例完全统一、无变体,写硬匹配的awk脚本难度很低,几十行代码即可实现,无需额外依赖
- 如果需要兼容任意合法的同结构JSON,只需使用gawk的JSON解析扩展,实现难度也属于中等偏下,无需复杂逻辑
适配示例格式的awk转换脚本
# 运行需使用gawk,保存为json2http.awk BEGIN { RS="}" ORS="" } # 提取并拆分URL /"http/ { url_raw = $0 gsub(/.*"http:\/\/|".*/, "", url_raw) split(url_raw, url_parts, "/") host = url_parts[1] req_path = "/" for (i=2; i<=length(url_parts); i++) { req_path = req_path url_parts[i] if (i < length(url_parts)) req_path = req_path "/" } } # 提取请求方法 /"method":/ { req_method = $0 gsub(/.*"method": "|",.*/, "", req_method) } # 提取请求头 /"Accept":|Accept-Encoding|Accept-Language|Connection|Upgrade-Insecure-Requests|User-Agent/ { h_key = $0 gsub(/.*"|":.*/, "", h_key) h_val = $0 gsub(/.*": "|",?\n.*/, "", h_val) header_map[h_key] = h_val } # 提取请求参数 /"params":/,/\]/ { if ($0 ~ /".*"/ && $0 !~ /params/) { param = $0 gsub(/.*"|".*/, "", param) param_arr[++param_cnt] = param } } END { # 输出请求行,行尾带\r\n printf "%s %s HTTP/1.1\r\n", req_method, req_path # 输出Host头 printf "Host: %s\r\n", host # 拼接POST表单 req_body = "" for (i=1; i<=param_cnt; i++) { if (req_body != "") req_body = req_body "&" req_body = req_body param_arr[i] "=a" # 此处参数值可按需修改 } # 输出POST专属头 if (req_method == "POST") { printf "Content-Type: application/x-www-form-urlencoded\r\n" printf "Content-Length: %d\r\n", length(req_body) } # 输出原有请求头 for (k in header_map) { printf "%s: %s\r\n", k, header_map[k] } # 输出头和体之间的空行 printf "\r\n" # 输出请求体 if (req_body != "") { printf "%s\r\n", req_body } }
使用方法
执行命令:gawk -f json2http.awk 输入文件.json > 输出请求.raw,即可生成符合要求的raw HTTP请求文件。
相关转换工具推荐
- Burp Suite:支持自定义格式批量导入请求数据,可直接导出标准raw HTTP请求,适合安全测试场景下的批量处理需求
- 本地Python脚本:用内置json、urllib库实现转换,容错性比awk更高,适合JSON格式存在变体、或者需要自定义参数值的复杂场景
- 开源本地转换工具:可搜索适配该场景的JSON转HTTP raw开源项目,本地部署使用,避免敏感请求数据上传公网
内容的提问来源于stack exchange,提问作者Emad
相关产品推荐
相关产品推荐

