Example 3

HTTP Requests

Example 3

Top  Previous  Next

Upload ảnh lên trang: http://upanh.vn-zoom.org/

(Dung lượng ảnh < 1Mb)

 

 

Ta làm theo từng bước như sau:

 

1/ Xem Live HTTP Headers các request cần làm

 

 

·Chọn Server: Flickr rồi chọn Add Files và chọn ảnh cần upload. Khoan bấm vào nút UPLOAD.

 

·Nếu chưa bật Live HTTP Headers thì bật nó lên. Nếu bật rồi thì bấm Clear để xoá hết các request cũ không liên quan.

 

·Giờ ta mới bấm nút UPLOAD, và Live HTTP Headers sẽ hiển thị 1 đống thông tin. Ta tìm trong Live HTTP Headers đoạn request liên quan:

 

https://vn-zoom.org/upanh/upload.php

 

POST /upload.php HTTP/1.1

Host: upanh.vn-zoom.org

User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:52.0) Gecko/20100101 Firefox/52.0 Cyberfox/52.2.0

Accept: application/json, text/javascript, */*; q=0.01

Accept-Language: en-US

Accept-Encoding: gzip, deflate

X-Requested-With: XMLHttpRequest

Referer: http://upanh.vn-zoom.org/

Content-Length: 14616

Content-Type: multipart/form-data; boundary=---------------------------531682518029

Cookie: _ga=GA1.2.1230319195.1505068939; _gid=GA1.2.168204034.1505068939; _gat=1

DNT: 1

Connection: keep-alive

 

-----------------------------531682518029

Content-Disposition: form-data; name="type"

 

upload

-----------------------------531682518029

Content-Disposition: form-data; name="watermark"

 

1

-----------------------------531682518029

Content-Disposition: form-data; name="watermark_position"

 

br

-----------------------------531682518029

Content-Disposition: form-data; name="watermark_logo"

                                                                                                          → Data-Form

1

-----------------------------531682518029

Content-Disposition: form-data; name="resize"

 

0

-----------------------------531682518029

Content-Disposition: form-data; name="server"

 

flickr

-----------------------------531682518029

Content-Disposition: form-data; name="files[]"; filename="1.png"

Content-Type: image/png

 

�PNG

 

 

 

2/ Phân tích Headers

 

·Các Header như Accept, Accept-Language, Accept-Encoding, Connection, Content-Length, User-Agent, DNT: 1 ta không cần để ý đến chúng vì UDF đã add sẵn hết rồi. Xem thêm chi tiết tại mục $sAdditional_Headers

 

·Vậy còn lại header X-Requested-With: XMLHttpRequest là cần nạp vào $sAdditional_Headers

 

 

3/ Phân tích Referer

 

Hình trên có Referer nhưng không điền vào tham số $sReferer cũng được, chừng nào request thất bại mới điền vào để thử.

 

 

4/ Phân tích Cookie

 

Những cookie tạp nham thường có dạng __abcxyz, ___abcxyz ta không cần để ý đến chúng.

 

 

5/ Phân tích Data cần gửi đi

 

Ta sẽ dùng hàm _HttpRequest_CreateDataForm để tạo nhanh Data-Form.

·Key1type, Value1 upload
·Key2watermark, Value2 1
·Key3watermark_position, Value3 br
·Key4watermark_logo, Value4 1
·Key5resize, Value5 0
·Key6server, Value6 flickr
·Key7files[ ], Value7Thông tin của ảnh (gồm Tên, Content-Type, Nội dung). Vì Value7Thông tin tập tin nên:
ØKey7 ta phải thêm dấu $ vào trước: files[ ] $files[ ]
ØValue7 ta nạp đường dẫn của tập tin cần upload.
ØXem hướng dẫn của hàm _HttpRequest_CreateDataForm nếu chưa hiểu vì sao như vậy.

 

Các Value của watermark, resize tuỳ theo lựa chọn Option của mình trước khi bấm nút UPLOAD mà nó sẽ có các giá trị tương ứng. Ví dụ mình sửa lại Key:watermark có Value thành 0 thì ảnh upload sẽ không kèm theo watermark.

 

 

6/ Phân tích ngoài luồng

 

Nếu request Upload thành công thì ta sẽ nhận được dữ liệu trả về có ví dụ như sau:

{"error":false,"url":"http:\/\/farm5.staticflickr.com\/4430\/36335716963.png"}

Ta sẽ dùng StringRegExp để tách url ra và StringReplace để loại bỏ các dấu \

 

 

7/ Hoàn thiện code

 

#include <_HttpRequest.au3>

$sImagePath = FileOpenDialog("Choose Pic to post", "", "Image (*.jpg;*.png;*.gif;*.bmp)", 4)

If @error Then Exit

 

Local $aForm = [['type', 'upload'], ['watermark', 1], ['watermark_position', 'br'], ['watermark_logo', 1], ['resize', '0'], ['server', 'flickr'], ['$files[]', $sImagePath]]

 

$sDataToSend = _HttpRequest_CreateDataForm($aForm)

 

$rq = _HttpRequest(2, 'https://vn-zoom.org/upanh/upload.php', $sDataToSend, '', '', 'X-Requested-With: XMLHttpRequest')

;-------------------Tách url ảnh----------------------------------

$LinkImage = StringRegExp($rq, '"url":"(.*?)"', 1)

If @error Then Exit MsgBox(4096, 'Lỗi',  'Upload thất bại')

$LinkImage = StringReplace($LinkImage[0], '\', '')

ShellExecute($LinkImage) ; Test thử URL ảnh

 

 

Ngoài ra ta có thể rút gọn code bằng cách nạp thẳng $aForm vào tham số $sData2Send của _HttpRequest luôn cũng được:

 

#include <_HttpRequest.au3>

$sImagePath = FileOpenDialog("Choose Pic to post", "", "Image (*.jpg;*.png;*.gif;*.bmp)", 4)

If @error Then Exit

 

Local $aForm = [['type', 'upload'], ['watermark', 1], ['watermark_position', 'br'], ['watermark_logo', 1], ['resize', '0'], ['server', 'flickr'], ['$files[]', $sImagePath]]

 

$rq = _HttpRequest(2, 'https://vn-zoom.org/upanh/upload.php', $aForm, '', '', 'X-Requested-With: XMLHttpRequest')