いつもお世話になっております。
Wininet を使って、POST送信しようと下記のコーディングをしましたが、HttpSendRequestで、エラーを起こしてしまします。どなたか問題点をご指摘・ご指導いただけませんでしょうか。
Delphi4 WinXPと聊かふ古い環境です。よろしくお願い致します。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, WinInet,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var
hNet,hURL,hRequest: HINTERNET;
Buffer :array [0..1023] of Char;
ReadCount :Cardinal;
HtmlStr :string;
TimeOut: integer;
begin
hNet :=InternetOpen(nil, INTERNET_OPEN_TYPE_PRECONFIG,nil, nil, 0);
if Assigned(hNet) then
begin
try
hURL := InternetConnect(hNet,PChar('http://www.xxxxx.com'),INTERNET_DEFAULT_HTTP_PORT,nil,nil,INTERNET_SERVICE_HTTP,0,DWORD(0));
//http://www.xxxxx.comは、適宜変更
if(hURL<>nil) then
begin
Memo1.Lines.Add('Connect_OK');
hRequest := HttpOpenRequest(hURL, PChar('POST'), PChar('/xxxxx/index.html'),'HTTP/1.0',PChar(''), nil, INTERNET_FLAG_RELOAD,0);
///xxxxx/index.htmlは、適宜変更
end;
if(hRequest<>nil) then
begin
Memo1.Lines.Add('Open_Request_OK');
TimeOut := 60 * 1000;
if(InternetSetOption(hNet, INTERNET_OPTION_RECEIVE_TIMEOUT, @TimeOut,SizeOf(TimeOut))) then
Memo1.Lines.Add('Set_TimeOut_OK')
else
Memo1.Lines.Add('Set_TimeOut_Error');
if(HttpSendRequest(hRequest,nil , 0, PChar('?para1=TEST'), strlen(PChar('?para1=TEST')))) then
Memo1.Lines.Add('Send_OK')
else
Memo1.Lines.Add('Send_Error'); //ここで、エラーになってしまう。
end;
while true do begin
InternetReadFile(hRequest, @Buffer, Sizeof(Buffer), ReadCount); //URLハンドルを元にBufferに読み込む(ファイル最後まで繰り返す)
if ReadCount = 0 then Break; //ファイルの最後までいったら抜ける
HtmlStr :=HtmlStr +string(Buffer);
end;
Memo1.Lines.Add(HtmlStr);
InternetCloseHandle(hNet);
except
ShowMessage('error');
end
end;
end;
end.
http://www.xxxxx.com
を
www.yahoo.co.jp
/xxxxx/index.html
を
index.html
で Send_OK にはなる
KHE00221さん
ご指導ありがとうございます。
単純なパラメータ設定誤りでした。
今後ともよろしくお願い致します。
申し訳ありません。
HttpsendRequestのエラーは解消し、データをリードできるようにはなりました。
しかし、POSTするデータの記述の仕方が悪いのか、POSTされないようです。
HttpSendRequest(hRequest,nil , 0, PChar('?para1=TEST'), strlen(PChar('?para1=TEST')))
書き方について、どなたかご指導頂けませんでしょうか。
よろしくお願い致します。
POSTするには、ヘッダをつけて送信しなきゃ。
これお約束ね。パラメータの最初の'?'も不要。
const
HeadStr = 'Content-Type: application/x-www-form-urlencoded';
HttpSendRequest(hRequest, PChar(HeadStr), Length(HeadStr), …
お約束さん
早速のご指導ありがとうございました。
無事送信できました。
今後ともよろしくお願い致します。
ツイート | ![]() |