Добрый вечер. Тут разбираюсь с winsock. Нашёл пример и пытаюсь переделать его; чтобы на скрипт up.php(<?php copy($zak, «user/$zak_name»)?>) отправлялся файл. С помощью браузера файл отправляется на отлично. С помощью программы нет. Я уже с помощью снифера(wireshark) просто скопировал все запросы в программу, но даже так не хочет отправлятся. Вот ссылка на скрин где слева обычный запрос, справа через программу: http://i7.fastpic.ru/big/2010/0627/09/a32226fb7d62f975f5ca68a638210c09.jpg . Вот код программы:
#include "stdafx.h"
#define _DEBUG_PRINT(X)
#include <windows.h>
#include <winsock.h>
#include <string>
#include <iostream>
#include <fstream>
using namespace std;
#pragma comment(lib,"Wsock32.lib")
#define SEND_RQ(MSG) \
/*cout<<send_str;*/ \
send(sock,MSG,strlen(MSG),0);
int request (char* hostname, char* parameters, string& message);
int main()
{
string message;
int a = request ("мойхост.freehostia.com", "", message);
return 0;
}
int request (char* hostname, char* parameters, string& message)
{
string test;
WSADATA WsaData;
WSAStartup (0x0101, &WsaData);
sockaddr_in sin;
int sock = socket (AF_INET, SOCK_STREAM, 0);
if (sock == -1)
{
return -100;
}
sin.sin_family = AF_INET;
sin.sin_port = htons( (unsigned short)80);
struct hostent * host_addr = gethostbyname(hostname);
sin.sin_addr.s_addr = *((int*)*host_addr->h_addr_list) ;
connect (sock,(const struct sockaddr *)&sin, sizeof(sockaddr_in) );
string send_str;
char *sendbuf ="987";
SEND_RQ("POST /up.php HTTP/1.1\r\n");
SEND_RQ("User-Agent: Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.5.24 Version/10.53\r\n");
SEND_RQ("Host: мойхост.freehostia.com\r\n");
SEND_RQ("Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1\r\n");
SEND_RQ("Accept-Language: ru-RU,ru;q=0.9,en;q=0.8\r\n");
SEND_RQ("Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1\r\n");
SEND_RQ("Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0\r\n");
SEND_RQ("Referer: http://мойхост.freehostia.com/Simpleupload.html\r\n");
SEND_RQ("Cookie: __utma=2.... \r\n");
SEND_RQ("Cookie2: $Version=1\r\n");
SEND_RQ("Connection: Keep-Alive, TE\r\n");
SEND_RQ("TE: deflate, gzip, chunked, identity, trailers\r\n");
SEND_RQ("Content-Length: 172\r\n");
SEND_RQ("Content-Type: multipart/form-data; boundary=------------iyYiiH1goXBKlKW1LwhpRm\r\n");
SEND_RQ("\r\n");
//Вот сдесь начинается проблема(wireshark считает, что дальше запрос неверно составлен)и на сайт файл не отправляется
SEND_RQ("------------iyYiiH1goXBKlKW1LwhpRm\r\n");
SEND_RQ("Content-Disposition: form-data; name=\"zak\"; filename=\"test.txt\"\r\n");
SEND_RQ("Content-Type: text/plain\r\n\r\n");
send(sock,sendbuf,(int)strlen(sendbuf),0);
SEND_RQ("\r\n");
SEND_RQ("------------iyYiiH1goXBKlKW1LwhpRm--\r\n");
//_DEBUG_PRINT(cout<<"####HEADER####"<<endl);
char c1[1];
int l,line_length;
bool loop = true;
bool bHeader = false;
while(loop)
{
l = recv(sock, c1, 1, 0);
if(l<0) loop = false;
if(c1[0]=='\n')
{
if(line_length == 0) loop = false;
line_length = 0;
if(message.find("200") != string::npos)
bHeader = true;
}
else if(c1[0]!='\r')
line_length++;
_DEBUG_PRINT( cout<<c1[0]);
message += c1[0];
}
message="";
if(bHeader)
{
_DEBUG_PRINT( cout<<"####BODY####"<<endl) ;
char p[1024*10];
l = recv(sock,p,1024*10-1,0)
_DEBUG_PRINT( cout.write(p,l)) ;
p[l] = '\0';
message += p;
_DEBUG_PRINT( cout << message.c_str());
}
else
{
return -102;
}
closesocket(sock);
WSACleanup( );
return 0;
}
Подскажите пожалуйста где ошибка. Уже два дня мучаюсь не могу увидеть где она.