html - CURL:当 HTML 页面有脚本时撰写方法 POST
问题描述
我正在尝试编写一个 bash 脚本来自动发送对数百个此类垃圾邮件链接的投诉: https://script.google.com/macros/s/hash 仅用作重定向到众所周知的犯罪域。
投诉此类垃圾链接的正确地址是: https: //support.google.com/code/contact/cloud_platform_report
通常对于这样的情况,我使用 curl 的方案:
- 下载主页
- 解析 home.html 以查找表单参数和方法 POST
- 发送带有所需参数的 curl 答案
像这样的脚本:
#!/bin/bash
# input parameters
name="" # put here the user name
email="" # put the google email
option="Google App Engine"
date="07/24/2021"
details="https://script.google.com/macros/s/<hash>"
# configuration variables
reportURL="https://support.google.com/code/contact/cloud_platform_report"
pars="-s -S -L -b cs.txt -c cs.txt" # curl default parameters
if (test -e "cs.txt" ) then { rm cs.txt ; } fi
# 1) download homepage ...
file=home.html
url=$reportURL
curl -o $file $pars $url
# 2) parse homepage to extract parameters ...
var1=`cat $file | grep <something1>`
var2=`cat $file | grep <something2>`
data="name=$name&email=$email&option=$option&&date=$date&detail=$detail&FORM=$var1&SUBMIT=$var2"
# 3) send the answer with parameters ...
file=reply.html
url=$reportURL # may differ
curl -o $file $pars --data "$data" $url
但是通过第 1 步下载的这个主页,我可以找到表单参数、许多脚本但没有 POST 方法(而我可以在脚本代码中找到“POST”)。
如何构建卷曲答案?
注意:由于页面使用HTTPS,使用Wireshark捕捉和理解浏览器流量也不容易
编辑:在此处添加了 html 页面的相关部分:
...
<label class="cc" for="fullname_prefill">
<span class="contact-form-label__text">Name</span>
</label>
<input aria-label="Name" id="fullname_prefill" maxlength="1000" name="fullname_prefill" value=" " type="text"></div>
<label class="cc" for="email_prefill_req">
<span class="contact-form-label__text">Email address *</span>
</label>
<input aria-label="Email address *" id="email_prefill_req" maxlength="1000" name="email_prefill_req" type="text">
<div class="validation-message custom" tabindex="-1">Please provide a valid email address.</div>
...
<div class="list-item" aria-labelledby="Google_Cloud_Platform_Service--google_app_engine">
<label class="material-radio">
<input class="material-radio__input" aria-label="Google App Engine ( *)" id="Google_Cloud_Platform_Service--google_app_engine" name="Google_Cloud_Platform_Service" value="google_app_engine" type="radio">
<label class="material-radio__label-text" for="Google_Cloud_Platform_Service--google_app_engine">
<div class="material-radio__circle"></div>
<div class="material-radio__fill"></div>
<span class="contact-form-label__text">Google App Engine</span>
</label>
</label>
</div>
...
<label class="cc" for="abuse_date">
<span class="contact-form-label__text">Abuse date</span>
</label>
<input aria-label="Abuse date" id="abuse_date" name="abuse_date" placeholder="MM/DD/YYYY" type="text">
</div>
<div class="field" data-contact-form-field-required="true" data-enable-form-single-attachments="true" data-frd-context-type="TYPE_CORE" data-frd-context-type-number="15" data-frd-identifier="IDENTIFIER_ISSUE_DESCRIPTION" data-frd-identifier-number="8000020" data-frd-v2-identifier="IDENTIFIER_ISSUE_DESCRIPTION" data-frd-v2-identifier-number="8000020" data-frd-value-type="VALUE_TYPE_STRING" data-frd-value-type-number="2" data-page="1" data-type="TEXTAREA" data-use-new-uploads-component-for-cufs="true">
...
<div class="field" data-enable-form-single-attachments="true" data-frd-context-type="TYPE_UNSPECIFIED" data-frd-context-type-number="0" data-frd-identifier="IDENTIFIER_UNSPECIFIED" data-frd-identifier-number="0" data-frd-v2-identifier="IDENTIFIER_UNSPECIFIED" data-frd-v2-identifier-number="0" data-frd-value-type="VALUE_TYPE_UNSPECIFIED" data-frd-value-type-number="0" data-page="1" data-type="HIDDEN" data-use-new-uploads-component-for-cufs="true">
<input name="Subject" value="Google Cloud Platform Abuse Report" type="hidden">
</div>
<div class="alert-area"></div>
<div class="button-bar">
<span class="notification-area" tabindex="-1"></span>
<div class="buttons">
<button class="submit-button material2-button material2-button--filled" type="button">Submit</button>
</div>
</div>
<div class="contact-form__gdpr-dialog">
<div data-page-data-key="gdpr-dialog-privacy-policy" style="display:none">https://myaccount.google.com/privacypolicy?hl=$0</div>
<div class="gdpr-dialog__text">Some <a class="gdpr-dialog-trigger" href="#">account and system information</a>
will be sent to Google, and support calls and chats may be recorded. We will use
...
解决方案
推荐阅读
- jdbc - Database connection failed with JDBC to SAP Hana
- azure - Azure Pipelines 代理项目未能应用
- nginx - Nginx 重写并删除部分 url
- c++ - 堆栈的通用清除函数
- blockchain - 单笔交易需要多个合约/结果的情况是什么?
- python - 使用 Dask Dataframes 将同一组的行转换为单行
- python-3.x - 如果调用了内置函数,如何在 Python 中进行测试
- node.js - 用于多个反应应用程序的 Nginx 配置(docker-compose)
- c++ - 使用 SIGABRT linux C++ 杀死父进程时子进程中止
- c++ - 为什么我可以在本地使用 CMake 提供的模块(特别是 CMakeDependentOption.cmake),但不能在 CI 或 Docker 上使用?