2014-11-23 3 views
-2

Я уверен, преобразование программы Perl в C помощью LibcurlLibcurl C Http Post/Get

sub IsAdmin() { 
    $r = &HTTPGet("http://".$_[0]."wp-admin/edit.php"); 
    if (!$r->is_success) { return FALSE; } 
    if ($r->content =~ /wp-admin\/post.php\?/) { 
      return TRUE; 
    } 
    return FALSE; 
} 

И это один

sub IsWordPress() { 
    my $url = $_[0]; 
    $url =~ s/http:\/\///; 
    my $new_url = "http://" . $url . "/wp-login.php"; 
    my $r = &HTTPGet($new_url); 
    if ($r->content =~ /action=lostpassword/) { 
      return TRUE; 
    } 
    return FALSE; 
} 

Моя программа будет отправлять запрос HTTP и посмотреть, если ответ содержит конкретная строка; например action=lostpassword.

Я хочу отправить запрос HTTP POST и получить базовый URL-адрес независимо от перенаправления и содержимого ответа.

+0

Я сделал значительные изменения в ваш Qu estion. Пожалуйста, проверьте, что я написал, и убедитесь, что он правильно описывает вашу проблему. – Borodin

+0

Просьба показать код C, который вы написали, и описать проблемы, с которыми вы сталкиваетесь, чтобы заставить его работать. – Borodin

+0

@Borodin Thankyou, но я не думаю, что мой вопрос заслуживает голосования. Я просто искал помощи у вас, ребята. Днем человек учится принимать людей в вашем сообществе. Я знаю, что вы, ребята, лучше программисты, чем я. Но привет почему я прошу о вашей помощи. Всегда получал ответ откуда-то еще, спасибо за помощь. –

ответ

0

libcurl обеспечивает фантастическое количество примеров битов кода here.

Однако, безусловно, лучший способ быстро генерировать код C, который делает то, что вы хотите использовать инструмент командной строки curl с --libcurl вариант:

--libcurl <file> 
      Append this option to any ordinary curl command line, and you 
      will get a libcurl-using C source code written to the file that 
      does the equivalent of what your command-line operation does! 

      If this option is used several times, the last given file name 
      will be used. (Added in 7.16.1) 

Например команда:

curl --silent --libcurl /tmp/test.c http://www.google.com/ 

дает выход:

/********* Sample code generated by the curl command line tool ********** 
* All curl_easy_setopt() options are documented at: 
* http://curl.haxx.se/libcurl/c/curl_easy_setopt.html 
************************************************************************/ 
#include <curl/curl.h> 

int 
main (int argc, char *argv[]) 
{ 
    CURLcode ret; 
    CURL *hnd; 

    hnd = curl_easy_init(); 
    curl_easy_setopt (hnd, CURLOPT_URL, "http://www.google.com/"); 
    curl_easy_setopt (hnd, CURLOPT_NOPROGRESS, 1L); 
    curl_easy_setopt (hnd, CURLOPT_USERAGENT, "curl/7.35.0"); 
    curl_easy_setopt (hnd, CURLOPT_MAXREDIRS, 50L); 
    curl_easy_setopt (hnd, CURLOPT_TCP_KEEPALIVE, 1L); 

    /* Here is a list of options the curl code used that cannot get generated 
    as source easily. You may select to either not use them or implement 
    them yourself. 

    CURLOPT_WRITEDATA set to a objectpointer 
    CURLOPT_WRITEFUNCTION set to a functionpointer 
    CURLOPT_READDATA set to a objectpointer 
    CURLOPT_READFUNCTION set to a functionpointer 
    CURLOPT_SEEKDATA set to a objectpointer 
    CURLOPT_SEEKFUNCTION set to a functionpointer 
    CURLOPT_ERRORBUFFER set to a objectpointer 
    CURLOPT_STDERR set to a objectpointer 
    CURLOPT_HEADERFUNCTION set to a functionpointer 
    CURLOPT_HEADERDATA set to a objectpointer 

    */ 

    ret = curl_easy_perform (hnd); 

    curl_easy_cleanup (hnd); 
    hnd = NULL; 

    return (int) ret; 
} 

/**** End of sample code ****/ 
+1

Хорошо, так что задан * оригинал * вопрос, почему это заслужило нисходящее направление? – abligh

+0

Пожалуйста, объясните. Как ваше решение относится к исходному сообщению, но не относится к редактированию? – Borodin

+0

@Borodin: Я не могу теперь видеть оригинал, но это не была модель ясности, но, похоже, спрашивала, как одна из них создала программу C для загрузки URL-адреса так же, как и некоторые perl. В общем, совет * 'заставляет его работать с 'curl' и добавить' --libcurl' * *, это очень полезно для этого. Теперь вопрос изменился, чтобы быть более конкретным (re 'POST', без перенаправления и т. Д.), Но опять же, если вы можете сделать это с' curl' в командной строке, директива '--libcurl' будет перевести это на C. Я не думаю, что разумно наказать ответчика за неясный вопрос. – abligh

Смежные вопросы