Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

CGI C++ URL

314
27 декабря 2006 года
fanto
374 / / 15.02.2003
Только начал разбираться с CGI. Литературы ноль. Интернет хранит молчание...
Пишу на Си. Вопрос таков:
Как мне из Сишной программы запросить страницу с заданным УРЛом?
То есть нужен эффект как в cURLе, если кто знаком с РНР...
294
30 декабря 2006 года
Plisteron
982 / / 29.08.2003
А можно чуток поподробнее? Чего она делать-то должна?
На запрос cURL http://www.php.net даёт целую кучу красивых и разных функций.
27K
21 марта 2007 года
AirWorker
1 / / 21.03.2007
Вы наверное не знали, но CURL - это вовсе не PHP-шная фича.
Это библиотека C(++) с мордой для командной строки на *nix-системах.
Вот так можно из командной строки работать с URL`ами:



Цитата:
sniff@3vamp:~> curl -I http://forum.codenet.ru/showthread.php?t=33434
HTTP/1.1 200 OK
Date: Wed, 21 Mar 2007 02:47:31 GMT
Server: Apache/1.3.37 (Unix) PHP/4.4.4
X-Powered-By: PHP/4.4.4
Set-Cookie: bblastvisit=1174445251; expires=Thu, 20 Mar 2008 02:47:31 GMT; path=/; domain=.codenet.ru
Set-Cookie: bblastactivity=0; expires=Thu, 20 Mar 2008 02:47:31 GMT; path=/; domain=.codenet.ru
Cache-Control: private
Pragma: private
Connection: close
Content-Type: text/html; charset=windows-1251

sniff@3vamp:~>



Естественно, этот функционал есть и в библиотеке CURL.

17K
21 марта 2007 года
b0oh
18 / / 03.09.2006
если ты разбираешся в C, то можно реализовать подобное при помощи сокетов.
Пример на PHP:
Код:
<?php

    $pSock = fscokopen ("loaclhost", 80);

    fputs ($pSock, "GET / HTTP/1.1\r\n");
    fputs ($pSock, "Host: localhost\r\n");
    fputs ($pSock, "Connection: close\r\n");// это опционально, что б быстрей работало
    fputs ($pSock, "\r\n"); // пустой заголовок - конец всему

    echo "<pre>";

    while (!feof ($pSock))
        echo htmlspecialchars (fgets ($pSock, 1000));

    echo "</pre>";

    fclose ($pSock)

?>


точ так же на C
Код:
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

int main (void)
{
    int                iSocket,
                       iRet;
    struct sockaddr_in sSockAddr;

    char               szBuffer [1024];

    iSocket = socket (AF_INET, SOCK_STREAM, 0);

    if (iSocket < 0)
    {
        perror ("Could not create socket.\n");
        exit (1);
    }

    sSockAddr.sin_family = AF_INET;
    sSockAddr.sin_port = htons (80);
    sSockAddr.sin_addr.s_addr = inet_addr (szIP); // вот это я вырезал... это там всякими gethostbyname () и т.д. добываешь IP

    if (connect (iSocket, (struct sockaddr *) &sSockAddr, sizeof (sSockAddr))  < 0)
    {
        perror ("Could not connect.\n");
        exit (2);
    }

    szBuffer = "GET / HTTP/1.1\r\n";
    iRet = send (iSocket, szBuffer, strlen (szBuffer), 0);
//  if (iRet != strlen (szBuffer)) error!!!

    szBuffer = "Host: localhost\r\n";
    iRet = send (iSocket, szBuffer, strlen (szBuffer), 0);
//  if (iRet != strlen (szBuffer)) error!!!

    szBuffer = "Connection: close\r\n";
    iRet = send (iSocket, szBuffer, strlen (szBuffer), 0);
//  if (iRet != strlen (szBuffer)) error!!!

    szBuffer = "\r\n";
    iRet = send (iSocket, szBuffer, strlen (szBuffer), 0);
//  if (iRet != strlen (szBuffer)) error!!!

    while (1)
    {
        iRet = recv (iSocket, szBuffer, 1024, 0);

        if (iRet < 1)
            break;

//      а тут можно malloc'ами и strcpy'ями прилеплять к какому нибудь szContent
    }

    return (0);
}

если есть вопросы, постараюсь ответить
P.S. - лучше, но не интересней испоьзовать curl для C
17K
21 марта 2007 года
b0oh
18 / / 03.09.2006
ой, ответил блин ), чё то я не помсотрел на дату поста ))
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог