LINUX.ORG.RU

Сообщения Deliza

 

Вытащить куки из ответа

Форум — Development

Добрый день! Написал простенький на С++ веб-клиент. Когда сервер присылает ответ от POST запроса.Надо пропарсить ответ от сервера(вытащить куки). Куки находятся среди <input type='hidden' name='s' value='bb1pekf7f42a1tes3adfu6d762ed389ef4pa8c3237651805035118b1' />. Как лучше всего реализовать? Возможно такое сделать с помощью String class?

Deliza
()

Winsock и HTTP POST-запрос

Форум — Development

Добрый вечер. Тут разбираюсь с 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;
}

Подскажите пожалуйста где ошибка. Уже два дня мучаюсь не могу увидеть где она.

Deliza
()

не могу поставить VMvareTools на Red Hat Linux

Форум — Linux-install

я новичок в Линуксе, так что не пинайте сильно. Проблема такова:поставил Red Hat Linux 9 c помощью VMware Workstation(6.0.2 Build 59824),а когда начал ставить VMwareTools выдаёт ошибку. вот скриншот http://ipicture.ru/Gallery/Viewfull/754856.html.Делал вот по этой инструкции http://ipicture.ru/uploads/080302/zjd5UWWD6e.jpg. заранее спасиба.

>>>

Deliza
()

RSS подписка на новые темы