Potrzebuję napisać program który będzie pobierał kanał RSS z podanego adresu.
Korzystam z przykładu z tutoriala o socketach ze strony firsthost
Kod wygląda tak:
#include <stdio.h>
#include <winsock2.h>
int resolveHost( char *host )
{
LPHOSTENT hostEntry = gethostbyname(host);
if ( !hostEntry )
{
unsigned int addr = inet_addr( host );
hostEntry = gethostbyaddr((char *)&addr, 4, AF_INET);
if ( !hostEntry )
{
return 0;
}
}
return *((int*)*hostEntry->h_addr_list);
}
int main(int argc, char* argv[])
{
WSADATA wsaData;
SOCKADDR_IN saddr;
SOCKET sock;
char *http_req = "GET http://www.tvn24.pl/sport.xml HTTP/1.0\n\n";
char index[1024*20] = { 0 };
WSAStartup( MAKEWORD(2,2), &wsaData );
sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
saddr.sin_addr.S_un.S_addr = resolveHost ("www.tvn24.pl");
saddr.sin_family = AF_INET;
saddr.sin_port = htons(80);
if ( connect(sock, (SOCKADDR*)&saddr, sizeof(SOCKADDR)) == SOCKET_ERROR )
{
/* połączenie się nie powiodło */
sock = 0;
return -1;
}
send(sock,http_req,strlen(http_req),0);
recv(sock,index,1024*20,0);
printf("%s", index);;
closesocket(sock);
WSACleanup();
return 0;
}
Niestety działa tylko w niektórych przypadkach, a mianowicie wtedy gdy adres do kanału jest podany w odniesieniu do domeny głównej (nie przez subdomenę [np. http://sport.wp.pl/kat,1726,rss.xml]).
Czy wie ktoś co powinienem zrobić, aby program nie tylko potrafił pobierać kanały gdy dostanie adres do domeny głównej?
Przy jednej z prób otrzymałem taki wynik:
Location: http://http/index.php/pl/www.XXXXX.pl/index.php/pl
Gdy zmienne były ustawione tak:
char *http_req = "GET http://www.XXXXX.pl/index.php/pl HTTP/1.0\n\n";
saddr.sin_addr.S_un.S_addr = resolveHost ("www.XXXXX.pl");