curl cli postが失敗するHTTP/1.1 400 Bad Request

私はカールを使用して私の会社の顧客のルータに新しいファームウェアをアップロードすることを自動化しようとしています。私はこの機能を実行するルータのWebユーザーインターフェイスをシミュレートしようとしています。 私はhttpヘッダーを取得しており、次のようになっています。

POST /Forms/upload_1 HTTP/1.1

Host    192.168.1.1
User-Agent  Mozilla/5.0 (Windows NT 6.1; rv:9.0.1) Gecko/20100101 Firefox/9.0.1
Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language en-us,en;q=0.5
Accept-Encoding gzip, deflate
Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
DNT 1
Referer http://192.168.1.1/upload.html
Authorization   Basic YWRtaW46YWRtaW4=
Content-Type    multipart/form-data; boundary=---------------------------24464570528145
Content-Length  1455180

私はいくつかの隠されたフィールドを参照してフォームの投稿のデータを見て: 内容 - 処分:フォームデータ。 name = "tools_FW_UploadFile"; filename = "v1.08" Content-Type:アプリケーション/オクテットストリーム

内容 - 処分:フォームデータ。 name = "UpgradeItemFlag"

私のカールのcliスクリプトは、HTTP/1.1 400 Bad Requestを取得します。 出力:

C:\curl>curl -u "admin:admin" -H "Host:192.168.1.1" -H "User-Agent:Mozilla/5.0 (Windows NT 6.1; rv:9.0.1) Gecko/20100101 Firefox/9.0.1" -H "Accept:text
/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" -H "Accept-Language:en-us,en;q=0.5" -H "Accept-Encoding:gzip, deflate" -H "Accept-Charset:
 ISO-8859-1,utf-8;q=0.7,*;q=0.7" -H "Referer:http://192.168.1.1/upload.html" -H "DNT:1" -H "Expect:" -F "tools_FW_uploadFile=" -F "[email protected]:\curl\v1.08"
 -F "UpgradeItemFlag=1"  "http://192.168.1.1/Forms/upload_1" -v
* About to connect() to 192.168.1.1 port 80 (#0)
*   Trying 192.168.1.1... connected
* Connected to 192.168.1.1 (192.168.1.1) port 80 (#0)
* Server auth using Basic with user 'admin'
> POST /Forms/upload_1 HTTP/1.1
> Authorization: Basic YWRtaW46YWRtaW4=
> Host:192.168.1.1
> User-Agent:Mozilla/5.0 (Windows NT 6.1; rv:9.0.1) Gecko/20100101 Firefox/9.0.1
> Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
> Accept-Language:en-us,en;q=0.5
> Accept-Encoding:gzip, deflate
> Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
> Referer:http://192.168.1.1/upload.html
> DNT:1
> Content-Length: 1422382
> Content-Type: multipart/form-data; boundary=----------------------------805f48e96301
>
< HTTP/1.1 400 Bad Request
< Content-Length: 0
< Server: RomPager/4.07 UPnP/1.0
< EXT:
<
* Connection #0 to host 192.168.1.1 left intact
* Closing connection #0

私のカールは:

curl -u "admin:admin" -H "Host:192.168.1.1" -H "User-Agent:Mozilla/5.0 (Windows NT 6.1; rv:9.0.1) Gecko/20100101 Firefox/9.0.1" -H 

"Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" -H "Accept-Language:en-us,en;q=0.5" -H "Accept-Encoding:gzip, deflate" -H 

"Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7" -H "Referer:http://192.168.1.1/upload.html" -H "DNT:1" -H "Expect:" -F "name=tools_FW_uploadFile" 

-F "[email protected]:\curl\v1.08" -F "UpgradeItemFlag=1"  "http://192.168.1.1/Forms/upload_1"

誰かが私が間違っていることを見ることができれば、私はとても感謝しています。 フォームには次のようなhtmlがあります。

<input TYPE="FILE" NAME="tools_FW_UploadFile" SIZE="30" MAXLENGTH="128"><input TYPE="HIDDEN" NAME="UpgradeItemFlag" VALUE="0">

<input TYPE="BUTTON" NAME="FW_apply" VALUE="Update Firmware" onClick="uiDoUpdate()"

function uiDoUpdate()
{

document.Firmware_Upload.UpgradeItemFlag.value=1;
document.Firmware_Upload.submit();
}
0

1 答え

I ran into this exact same issue today and all of my Google Fu did not turn up the proper results. The specific issue for me when trying to work with curl was the line endings in the execution script. The fix for me was to actually run curl on a Linux system with Linux/Unix style line endings in the execution script. These are LF (\n) instead of CRLF (\r\n).

You can check a file with file /path/to/script.sh If file mentions anything about line endings, your script is incorrect and must be converted.

You can convert a file with dos2unix -U /path/to/script.sh

実際のLinuxシステムとまったく同じcurlコマンドを試してみることを強くお勧めします。これは、Windows上のカールはフォームデータで非常に厄介です。

1
追加された