首页 > 解决方案 > CURL:当 HTML 页面有脚本时撰写方法 POST

问题描述

我正在尝试编写一个 bash 脚本来自动发送对数百个此类垃圾邮件链接的投诉: https://script.google.com/macros/s/hash 仅用作重定向到众所周知的犯罪域。

投诉此类垃圾链接的正确地址是: https: //support.google.com/code/contact/cloud_platform_report

通常对于这样的情况,我使用 curl 的方案:

  1. 下载主页
  2. 解析 home.html 以查找表单参数和方法 POST
  3. 发送带有所需参数的 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
...

标签: htmlbashcurlhttps

解决方案


推荐阅读