請問如何通過WINSOCK對發送http頭請求 |
缺席
|
cyy0754
一般會員 發表:2 回覆:2 積分:0 註冊:2008-04-17 發送簡訊給我 |
例如我想對指定網站提供數據能如何實現,
如對http://127.0.0.1/get.asp這個頁面想只發送提交 string的數據:“test”是純指定數據。也就是HTTP頭的請求。能如何實現? HTTP控件能實現,不過我的是控制台的程序,所以想直接調用WINSOCK實現 記得曾經有個叫NC.EXE的黑客軟件好像就具備這樣的提交數據到指定WEB HOST的功能 我想提交個信息如: GET /board.php?cid=30&fid=67&tid=93365 HTTP/1.1 Accept: */* Referer: http://delphi.ktop.com.tw/board.php?cid=30&fid=67 Accept-Language: zh-cn User-Agent: Mozilla/4.0 (compatible; MSIE 6.0;Tencent Traveler4.0; Windows NT 5.1; SV1) Accept-Encoding: gzip, deflate Host: delphi.ktop.com.tw Connection: Keep-Alive Cache-Control: no-cache Cookie: __ut 類似這樣的數據。 希望大大能提供個DLEPHI的WINSOCK的例子,非VCL的。感謝 |
cyy0754
一般會員 發表:2 回覆:2 積分:0 註冊:2008-04-17 發送簡訊給我 |
[code delphi] procedure SendDATA(AIP: string; APort: integer); var data: TWSAData; sock: TSocket; addr: TSockAddrIn; iaddr: TInAddr; buff : array [0..1023] of char; begin try if (WSAStartup($0101, data) = 0) then begin sock := socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (sock <> INVALID_SOCKET) then begin // zero out the addr struct. FillChar(addr, SizeOf(TSockAddrIn), 0); FillChar(iaddr, SizeOf(TInAddr), 0); //fill in the internet address iaddr.S_addr := inet_addr(PChar(AIP)); //fill in the rest of the address. addr.sin_family := PF_INET; addr.sin_port := htons(APort); addr.sin_addr := iaddr; if (connect(sock, addr, SizeOf(TSockAddrIn)) = 0) then begin buff := (GET ..............TEST'); if (send(sock ,buff ,SizeOf(buff) , 0) = SOCKET_ERROR) then begin ShowMessage('Send Error'); end; closeSocket(sock); end end else begin ShowMessage('error socket'); end; end else begin ShowMessage('Failed to initialize winsock.'); end; finally
WSACleanup(); end; end; [/code] 但是問題是只能針對IP。例如對域名DNS的話就不起作用? 如果我想對www.Baidu.com的話 iaddr.S_addr := inet_addr(PChar(AIP)); 就不行了,望指教... 因為是對網站提交數據而不是對IP的。
編輯記錄
cyy0754 重新編輯於 2008-04-19 01:29:52, 註解 無‧
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |