WinInetを使って掲示板にPOSTするには

解決


take  2004-07-04 20:16:58  No: 9748

プログラムからインターネットの掲示板に書き込むアプリケーションを
作っています。
InternetOpenUrlを使って掲示板を読むことは出来るのですが
肝心の書き込みが出来ません。
POSTメソッドでパラメータIDとPASSWORDを渡そうとしているのですが
HttpSendRequestでタイムアウトが発生しているようです。
返値としてFalseが返りecodeに12007が代入されます。

サンプルソースを示します。
引数は
url1にhttp://掲示板のサーバー
url2に掲示板の相対アドレス
url3にcgi名
を入れているのですが自分でもよくわかっていません。

サーバーにPOSTする方法がありましたら教えてください。
お願いします。

function PostHtmlSource(const url1: string;const url2 : string;const url3: string): boolean;
const
 UserAgent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)';
 HeadStr = 'Content-Type: application/x-www-form-urlencoded';
var
 hSession: HINTERNET;
 hConnect : HINTERNET;
 hRequest: HINTERNET;

 hService: HINTERNET;
 dwBytesRead: Cardinal;
 s : string;
 ecode : Integer;

 dummy,BufLen : Cardinal;
begin
 Result:=False;

 s := 'ID=TAKE&PASSWORD=9876'//POSTするパラメータ;

 hSession := InternetOpen(PChar(UserAgent), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
 try
  if Assigned(hSession) then
   begin
    hConnect := InternetConnect(hSession, Pchar(Url1), INTERNET_DEFAULT_HTTP_PORT,
                                nil, nil, INTERNET_SERVICE_HTTP, 0, 0);

    hRequest := HttpOpenRequest(hConnect, 'POST',PChar(Url2),nil,PChar(Url3), nil,
                                INTERNET_FLAG_RESYNCHRONIZE, 1);

    result := HttpSendRequest(hRequest, PChar(HeadStr),Length(HeadStr),Pchar(s),Length(s));
    ecode := GetLastError();
  end;

 finally
  InternetCloseHandle(hRequest);
  InternetCloseHandle(hConnect);
  InternetCloseHandle(hSession);
 end;
end;


take  2004-07-05 00:01:45  No: 9749

自己レスです。

TNMHTTPクラスを使って
さらに引数をファイルとして書き出しておけば
なんとか出来そうです。

FNMHTTP.Post(url,'temp.txt')

WinInetはバグがあると聞きました。
TNMHTTPクラスを使った方が無難なのでしょうか

意見を聞いてから解決としたいと思います。


にしの  2004-07-06 00:19:21  No: 9750

NetManageのコンポーネントは、Delphi5まででしたっけ?
もし、Delphi5を使い続けるのなら、もしくは、NetManageのコンポーネントを別途購入するのであれば、よろしいかと思います。

Delphi7以降にするかもしれないのであれば、indyも良いかと思います。
Indy9のバージョンが、9.0.17になっていました。
また、Indy10も、10.0.18-Bおよび、10.0.19-Bが出ていました。
http://www.indyproject.org/
まだ使用していませんが、Indyにもバグはあります。D7付属のIndyでは、日本語メールを正しく扱えない場合があります。
今回のバージョンで直ったかな?
# 未確認


take  2004-07-08 20:19:53  No: 9751

Indyをインストールしてみたのですが
パスが通ってないのか何故かコンパイルエラーが出ます。

ソフト自身はとりあえずPOSTはTNMHTTPを使う方法で完成しました。
あとは送受信中他の処理が止まるからスレッド化したいと思います。


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加