ソケットプログラミングとC++スクリプトを使用してWikipediaページにアクセスしようとしています。サーバーにアクセスできますが、要求されたURLが存在しないことを通知する404エラーが表示されます。ブラウザで同じURLを入力するだけで問題ありません。 http://en.wikipedia.org/wiki/Hypertext_Transfer_ProtocolWikipediaへのHTTPリクエスト
これはC++のスクリプトは次のとおりです:
#include <iostream>
#include <sys/socket.h>
#include <resolv.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <cstring>
using namespace std;
int main()
{
int s, error;
char length[10];
length[0]=0;
struct sockaddr_in addr;
if((s = socket(AF_INET,SOCK_STREAM,0))<0)
{
cout<<"Error 01: creating socket failed!\n";
close(s);
return 1;
}
addr.sin_family = AF_INET;
addr.sin_port = htons(80);
inet_aton("204.27.61.92",&addr.sin_addr);
error = connect(s,(sockaddr*)&addr,sizeof(addr));
if(error!=0)
{
cout<<"Error 02: conecting to server failed!\n";
close(s);
return 1;
}
char msg[]="GET /wiki/Hypertext_Transfer_Protocol HTTP/1.1\nHOST: en.wikipedia.org\n\n"
int leng = send(s, msg, sizeof(msg), 0);
if(leng == -1)
cout<<"There is a problem!"<<endl;
send(s,msg,sizeof(msg),0);
char answ[1024];
ssize_t len;
while((len = recv(s, answ, 1024, 0)) > 0)
{
cout.write(answ, len);
}
cout << endl;
if(len < 0)
{
cout<<"Error!"<<endl;
}
close(s);
return 0;
}
スクリプトは、全体的な正常に動作
この
はURLです。char msg[] = "GET /beej/inet_ntoaman.html http/1.1\nHOST: retran.com\n\n";
でライン
char msg[]="GET /wiki/Hypertext_Transfer_Protocol HTTP/1.1\nHOST: en.wikipedia.org\n\n";
を交換すると、エラーなしで要求されたWebサイトを検索します。私はここで何が欠けていますか?なぜスクリプトはWikipediaで動作しないのですか?
おかげ
204.27.61.92とは何ですか? –
C++を実行している場合は、Cスタイル宣言の代わりに 'const std :: string msg'を使用するとよいでしょう。なぜあなたは 'curl'のようなライブラリを使うのではなく、これを難しい方法でやっていますか? – tadman
あなたは正確にどのようなエラーになっていますか? –