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
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.
· Key1 là type , Value1 là upload
· Key2 là watermark , Value2 là 1
· Key3 là watermark_position , Value3 là br
· Key4 là watermark_logo , Value4 là 1
· Key5 là resize , Value5 là 0
· Key6 là server , Value6 là flickr
· Key7 là files[ ] , Value7 là Thông tin của ảnh (gồm Tên, Content-Type, Nội dung). Vì Value7 là Thô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.
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 ' )