2012-02-03 52 views
23

Vì vậy, về cơ bản, tôi đang cố viết một loạt các kịch bản để tương tác với Dot Net Nuke. Tôi đã phân tích lưu lượng truy cập và giờ đây có thể đăng nhập và thực hiện một số tác vụ cơ bản. Tuy nhiên, tôi chưa bao giờ xử lý tệp nhị phân tải lên với curl. Ai đó có thể sẵn sàng xem xét điều này để giúp tôi không? Dưới đây là giải phẫu được yêu cầu:Đăng dữ liệu nhị phân với curl

http://pastebin.com/qU8ZEMaQ

Dưới đây là những gì tôi đã có cho curl cho đến nay:

http://pastebin.com/LG2ubFZG

chỉnh sửa: Đối với lười biếng -

chiều dài của tệp đạt được và được lưu trữ trong LENGTH Nhảm nhí chỉ là một bản sao/dán URL yêu cầu có thông số, trừ chính URL đó.

curl -L --cookie ~/.cms --data-binary "@background.jpg" \ 
--header "Content-Length: $LENGTH" \ 
--header "Content-Disposition: form-data" \ 
--header "name=\"RadFileExplorer1_upload1file0\"" \ 
--header "Content-Type: image/jpg" \ 
--header "Filename=\"background.jpg\"" \ 
--data $BULLSHIT \ 
--referer "Kept-Secret" \ 
"Kept-Secret" 

Trả lời

46

Bạn không cần --header "Content-Length: $ LENGTH".

Look ví dụ cho Google dụ:

http://code.google.com/apis/gdata/articles/using_cURL.html#creating-entries

 
curl --request POST --data-binary "@template_entry.xml" $URL 

Lưu ý rằng GET yêu cầu không hỗ trợ dữ liệu chuyển.

Cũng hãy nhớ rằng yêu cầu POST có 2 giản đồ mã hóa khác nhau. Đây là hình thức đầu tiên:

 
    $ nc -l -p 6666 & 
    $ curl --request POST --data-binary "@README" http://localhost:6666 

POST/HTTP/1.1 
User-Agent: curl/7.21.0 (x86_64-pc-linux-gnu) libcurl/7.21.0 OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.15 libssh2/1.2.6 
Host: localhost:6666 
Accept: */* 
Content-Length: 9309 
Content-Type: application/x-www-form-urlencoded 
Expect: 100-continue 

.. -*- mode: rst; coding: cp1251; fill-column: 80 -*- 
.. rst2html.py README README.html 
.. contents:: 

Bạn có thể yêu cầu này:

 
-F/--form name=content 
      (HTTP) This lets curl emulate a filled-in form in 
       which a user has pressed the submit button. This 
       causes curl to POST data using the Content- Type 
       multipart/form-data according to RFC2388. This 
       enables uploading of binary files etc. To force the 
       'content' part to be a file, prefix the file name 
       with an @ sign. To just get the content part from a 
       file, prefix the file name with the symbol . The 
       difference between @ and is then that @ makes a 
       file get attached in the post as a file upload, 
       while the makes a text field and just get the 
       contents for that text field from a file. 
+0

Cảm ơn đã phản ứng. Thật không may, không có gì quản lý để xảy ra. Nó sẽ có thể cho bạn để có một cái nhìn nhanh chóng tại giải phẫu bài? Làm thế nào bạn sẽ thêm vào một cái gì đó như: '------ WebKitFormBoundarymXQVUy6BiZBV3AxA Content-Disposition: form-data; name = "RadFileExplorer1 $ currentFolder" /Cổng/0/Hình ảnh/Kiểm tra/'đến lệnh curl? Điều đó có được thông qua tiêu đề không? Hoặc vì nó có một tên nó sẽ được thông qua dữ liệu bài thường xuyên? –

+0

Khi tôi ghi nhớ đúng yêu cầu POST, có tồn tại lược đồ mã hóa khác nhau (có thể quản lý thẻ FORM html ??). – gavenkoa

+0

Cũng bình thường với curl bạn có thể nói một cái gì đó như curl -d "username = cheese & password = 123456" , nhưng nó cũng trông rất khác khi tôi kiểm tra nó với Chrome/Firebug. Tôi chắc chắn không thấy Nội dung-Bố trí trong số những thứ khác. Tôi không biết liệu có cần phải là phiên bản đặc biệt của dữ liệu POST khi bạn đang gửi dữ liệu nhị phân và dữ liệu nhị phân hay không. –

Các vấn đề liên quan