全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2576
推到 Plurk!
推到 Facebook!

想請問一下POST和GET的問題??

 
boinne
一般會員


發表:1
回覆:3
積分:0
註冊:2006-08-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-09-21 11:51:41 IP:59.120.xxx.xxx 未訂閱
想請問一下各位大大,我想利用程式模擬網頁傳送資料到Webserver裡的一支CGI,想問一下我應該選擇哪各元件呢??

因為元件好多,不知道該選擇哪各才適合@@" 感謝
luckfox0927
一般會員


發表:13
回覆:7
積分:4
註冊:2002-12-29

發送簡訊給我
#2 引用回覆 回覆 發表時間:2006-09-27 11:16:05 IP:211.75.xxx.xxx 未訂閱

其實如果是一個簡單的送資料回去給Web Server cgi的話,用clientSocket
就很足夠了,下面是一個將資料送給一個XML Server的範例(可以用Post,也可用Get)
//---------------------------------------------------------------------------
#include "stdio.h"
#include "stdlib.h"
#include
#pragma hdrstop

#include "Unit1.h"
char HTTP_PostMethod[]=
"POST %s HTTP/1.1\r\n";
char HTTP_GetMethod[]=
"GET %s HTTP/1.1\r\n";
char HTTP_Head1[]=
"Host: 208.52.134.229\r\n";
char HTTP_Head2[]=
"Content-Length: %d\r\n";
char HTTP_Head3[]=
"Content-Type: text/xml; charset=utf-8;\r\n";
char HTTP_Head4[]=
"SOAPAction: \"http://208.52.134.229:8080/postmac\"\r\n";
char HTTP_EndHeader[]=
"\r\n";
char XML_SCRIPT[]=
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n\
http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"\r\n\">http://schemas.xmlsoap.org/soap/envelope/\">\r\n\
\r\n\
\r\n\">http://localhost/ATSPhone\">\r\n\
222222222222\r\n\
1\r\n\
\r\n\
\r\n\
\r\n";


//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Method=0;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{


ClientSocket1->Host=Edit1->Text;
ClientSocket1->Port=StrToInt(Edit2->Text);
ClientSocket1->Active=true;

}
void __fastcall TForm1::Button2Click(TObject *Sender)
{

ClientSocket1->Active=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Memo1->Text=XML_SCRIPT;
RadioButton1->Checked=true;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ClientSocket1Read(TObject *Sender,
TCustomWinSocket *Socket)
{
Memo2->Text=Memo2->Text Socket->ReceiveText();
}
//---------------------------------------------------------------------------


//---------------------------------------------------------------------------

void __fastcall TForm1::ClientSocket1Connect(TObject *Sender,
TCustomWinSocket *Socket)
{ char Request[1024];
char line[512];

if(RadioButton2->Checked==true)
{
sprintf(Request,HTTP_GetMethod,Edit3->Text.c_str());
strcat(Request,HTTP_Head1);
strcat(Request,HTTP_Head3);
strcat(Request,HTTP_Head4);
strcat(Request,HTTP_EndHeader);
ClientSocket1->Socket->SendText(Request);
}
if(RadioButton1->Checked==true) //Post
{
sprintf(Request,HTTP_PostMethod,Edit3->Text.c_str());
strcat(Request,HTTP_Head1);
sprintf(line,HTTP_Head2,Memo1->Text.Length());
strcat(Request,line);
strcat(Request,HTTP_Head3);
strcat(Request,HTTP_Head4);
strcat(Request,HTTP_EndHeader);
strcat(Request,Memo1->Text.c_str());

ClientSocket1->Socket->SendText(Request);

}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)
{
Memo2->Clear();
}
//---------------------------------------------------------------------------

luckfox0927
一般會員


發表:13
回覆:7
積分:4
註冊:2002-12-29

發送簡訊給我
#3 引用回覆 回覆 發表時間:2006-09-27 11:16:07 IP:211.75.xxx.xxx 未訂閱

其實如果是一個簡單的送資料回去給Web Server cgi的話,用clientSocket
就很足夠了,下面是一個將資料送給一個XML Server的範例(可以用Post,也可用Get)
//---------------------------------------------------------------------------
#include "stdio.h"
#include "stdlib.h"
#include
#pragma hdrstop

#include "Unit1.h"
char HTTP_PostMethod[]=
"POST %s HTTP/1.1\r\n";
char HTTP_GetMethod[]=
"GET %s HTTP/1.1\r\n";
char HTTP_Head1[]=
"Host: 208.52.134.229\r\n";
char HTTP_Head2[]=
"Content-Length: %d\r\n";
char HTTP_Head3[]=
"Content-Type: text/xml; charset=utf-8;\r\n";
char HTTP_Head4[]=
"SOAPAction: \"http://208.52.134.229:8080/postmac\"\r\n";
char HTTP_EndHeader[]=
"\r\n";
char XML_SCRIPT[]=
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n\
http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"\r\n\">http://schemas.xmlsoap.org/soap/envelope/\">\r\n\
\r\n\
\r\n\">http://localhost/ATSPhone\">\r\n\
222222222222\r\n\
1\r\n\
\r\n\
\r\n\
\r\n";


//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Method=0;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{


ClientSocket1->Host=Edit1->Text;
ClientSocket1->Port=StrToInt(Edit2->Text);
ClientSocket1->Active=true;

}
void __fastcall TForm1::Button2Click(TObject *Sender)
{

ClientSocket1->Active=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Memo1->Text=XML_SCRIPT;
RadioButton1->Checked=true;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ClientSocket1Read(TObject *Sender,
TCustomWinSocket *Socket)
{
Memo2->Text=Memo2->Text Socket->ReceiveText();
}
//---------------------------------------------------------------------------


//---------------------------------------------------------------------------

void __fastcall TForm1::ClientSocket1Connect(TObject *Sender,
TCustomWinSocket *Socket)
{ char Request[1024];
char line[512];

if(RadioButton2->Checked==true)
{
sprintf(Request,HTTP_GetMethod,Edit3->Text.c_str());
strcat(Request,HTTP_Head1);
strcat(Request,HTTP_Head3);
strcat(Request,HTTP_Head4);
strcat(Request,HTTP_EndHeader);
ClientSocket1->Socket->SendText(Request);
}
if(RadioButton1->Checked==true) //Post
{
sprintf(Request,HTTP_PostMethod,Edit3->Text.c_str());
strcat(Request,HTTP_Head1);
sprintf(line,HTTP_Head2,Memo1->Text.Length());
strcat(Request,line);
strcat(Request,HTTP_Head3);
strcat(Request,HTTP_Head4);
strcat(Request,HTTP_EndHeader);
strcat(Request,Memo1->Text.c_str());

ClientSocket1->Socket->SendText(Request);

}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)
{
Memo2->Clear();
}
//---------------------------------------------------------------------------

boinne
一般會員


發表:1
回覆:3
積分:0
註冊:2006-08-02

發送簡訊給我
#4 引用回覆 回覆 發表時間:2006-09-29 16:20:49 IP:61.31.xxx.xxx 未訂閱

感謝這位大大,現在有遇到一個比較怪的問題

我是把CON1.txt存URL CON2.txt 存cookie CON3.txt存傳送的字串 然後把接收的資料存成test.txt

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
String filename;
char ch;
FILE *fp;
filename = "CON1.txt"; //要讀取之路徑及檔名
fp=fopen(filename.c_str(),"rb"); //fopen開檔

while( (ch = getc(fp))!= '$' ) //fscanf讀檔案 ,並將資料讀進陣列
{
URL = ch;
}
fclose(fp);

filename = "CON2.txt"; //要讀取之路徑及檔名
fp=fopen(filename.c_str(),"rb"); //fopen開檔

while( (ch=getc(fp))!= '$' ) //fscanf讀檔案 ,並將資料讀進陣列
{
CookTemp = ch;
}
fclose(fp);

Edit1->Text = URL CookTemp POSTDATA;
NMHTTP1->HeaderInfo->Cookie = CookTemp;
NMHTTP1->HeaderInfo->Referer = URL;
NMHTTP1->Get(URL);
Memo1->Lines->Add(NMHTTP1->Body);
Memo1->Lines->SaveToFile("test.txt");
Timer1->Enabled = false ;
Form1->Free();
}

這程式確定是可以動作的,但是好像時間久了就會開始出現抓到的網頁跟之前的不一樣,會少滿多資料的,有高手可以幫我解答嗎???

luckfox0927
一般會員


發表:13
回覆:7
積分:4
註冊:2002-12-29

發送簡訊給我
#5 引用回覆 回覆 發表時間:2006-09-29 18:35:53 IP:220.128.xxx.xxx 未訂閱

我想你應該先用Ethereal或是Sniffer這類的軟體,先確認問題是出在哪邊?
是網頁下載都正常呢,但是接收部分卻出現錯誤?還是根本下載的原始檔就
已經改變了,另外你是用Timer1去抓檔案的,有沒有考慮到Timer1重複進入
可能產生的問題

boinne
一般會員


發表:1
回覆:3
積分:0
註冊:2006-08-02

發送簡訊給我
#6 引用回覆 回覆 發表時間:2006-10-02 09:27:04 IP:59.120.xxx.xxx 未訂閱
我有去試過抓取封包來觀看,發生錯誤好像是因為登入時間過久,登入名稱他顯示timeout,會是因為這樣導致無法擷取網頁資訊嗎@@?
===================引 用 文 章===================

我想你應該先用Ethereal或是Sniffer這類的軟體,先確認問題是出在哪邊?
是網頁下載都正常呢,但是接收部分卻出現錯誤?還是根本下載的原始檔就
已經改變了,另外你是用Timer1去抓檔案的,有沒有考慮到Timer1重複進入
可能產生的問題

luckfox0927
一般會員


發表:13
回覆:7
積分:4
註冊:2002-12-29

發送簡訊給我
#7 引用回覆 回覆 發表時間:2006-10-04 13:00:02 IP:220.128.xxx.xxx 未訂閱
有可能你登入時間過長,導致Server想把你踢開,因此傳回一個重新導向的網址
以至於你抓錯了網頁.我想你可可以不要採用keep alive 的方式,這樣每次都
會換不同的PORT.如果還是不能解決問題的話 建議你把ethereal抓到的東西貼
上來看看,比較榮一判斷問題再哪裡
surprise1020
一般會員


發表:16
回覆:8
積分:4
註冊:2006-09-20

發送簡訊給我
#8 引用回覆 回覆 發表時間:2006-10-23 17:25:59 IP:220.135.xxx.xxx 未訂閱
想請問一下  那有沒有JSP或者是HTML的範例呢
系統時間:2024-05-20 15:18:09
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!