⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testcommonpost.pm

📁 视频监控网络部分的协议ddns,的模块的实现代码,请大家大胆指正.
💻 PM
字号:
# Copyright 2002-2005 The Apache Software Foundation or its licensors, as# applicable.## Licensed under the Apache License, Version 2.0 (the "License");# you may not use this file except in compliance with the License.# You may obtain a copy of the License at##     http://www.apache.org/licenses/LICENSE-2.0## Unless required by applicable law or agreed to in writing, software# distributed under the License is distributed on an "AS IS" BASIS,# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.# See the License for the specific language governing permissions and# limitations under the License.#package Apache::TestCommonPost;use strict;use warnings FATAL => 'all';use constant POST_HUGE => $ENV{APACHE_TEST_POST_HUGE} || 0;use Apache::TestRequest ();use Apache::TestUtil qw(t_cmp t_debug);use Apache::Test qw(sok);BEGIN {    my $use_inline = 0;    eval {        #if Inline.pm and libcurl are available        #we can make this test about 3x faster,        #after the inlined code is compiled that is.        require Inline;        Inline->import(C => 'DATA', LIBS => ['-lcurl'],                       #CLEAN_AFTER_BUILD => 0,                       PREFIX => 'aptest_post_');        *request_init = \&curl_init;        *request_do   = \&curl_do;        $use_inline = 1;    } if POST_HUGE;    if (POST_HUGE) {        if ($@) {            t_debug "tests will run faster with Inline and curl installed";            print $@;        }        else {            t_debug "using Inline and curl client";        }    }    unless ($use_inline) {        t_debug "using LWP client";        #fallback to lwp        *request_init = \&lwp_init;        *request_do   = \&lwp_do;    }}sub lwp_init {    use vars qw($UA $Location);    $UA = Apache::TestRequest::user_agent();    $Location = shift;}sub lwp_do {    my $length = shift;    my $request = HTTP::Request->new(POST => $Location);    $request->header('Content-length' => $length);    if (LWP->VERSION >= 5.800) {        $request->content_ref(\('a' x $length));    } else {        # before LWP 5.800 there was no way to tell HTTP::Message not        # to copy the string, there is a settable content_ref since        # 5.800        use constant BUF_SIZE => 8192;        my $remain = $length;        my $content = sub {            my $bytes = $remain < BUF_SIZE ? $remain : BUF_SIZE;            my $buf = 'a' x $bytes;            $remain -= $bytes;            $buf;        };        $request->content($content);    }    my $response = $UA->request($request);    Apache::TestRequest::lwp_trace($response);    return $response->content;}my @run_post_test_small_sizes =  #1k..9k, 10k..50k, 100k  (1..9, 10..50, 100);my @run_post_test_sizes = @run_post_test_small_sizes;if (POST_HUGE) {    push @run_post_test_sizes,      #300k, 500k, 2Mb, 4Mb, 6Mb, 10Mb      300, 500, 2000, 4000, 6000, 10_000;}sub Apache::TestCommon::run_post_test_sizes { @run_post_test_sizes }sub Apache::TestCommon::run_post_test {    my $module = shift;    my $sizes = shift || \@run_post_test_sizes;    my $location = Apache::TestRequest::resolve_url("/$module");    request_init($location);    for my $size (@$sizes) {        sok {            my $length = ($size * 1024);            my $str = request_do($length);            chomp $str;            t_cmp($length, $str, "length posted");        };    }}1;__DATA____C__#include <curl/curl.h>#include <curl/easy.h>static CURL *curl = NULL;static SV *response = Nullsv;static long total = 0;static size_t my_curl_read(char *buffer, size_t size,                           size_t nitems, void *data){    size_t bytes = nitems < total ? nitems : total;    memset(buffer, 'a', bytes);    total -= bytes;    return bytes;}static size_t my_curl_write(char *buffer, size_t size,                            size_t nitems, void *data){    sv_catpvn(response, buffer, nitems);    return nitems;}void aptest_post_curl_init(char *url){    char *proto = "HTTP/1.1"; /* curl default */    curl = curl_easy_init();    curl_easy_setopt(curl, CURLOPT_MUTE, 1);    curl_easy_setopt(curl, CURLOPT_URL, url);    curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");    curl_easy_setopt(curl, CURLOPT_UPLOAD, 1);    curl_easy_setopt(curl, CURLOPT_READFUNCTION, my_curl_read);    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, my_curl_write);    if (!getenv("APACHE_TEST_HTTP11")) {        curl_easy_setopt(curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);        proto = "HTTP/1.0";    }    fprintf(stdout, "#CURL using protocol %s\n", proto);    fflush(stdout);    response = newSV(0);}SV *aptest_post_curl_do(long len){    sv_setpv(response, "");    total = len;    curl_easy_setopt(curl, CURLOPT_INFILESIZE, len);    curl_easy_perform(curl);    return SvREFCNT_inc(response);}void aptest_post_END(void){    if (response) {        SvREFCNT_dec(response);    }    if (curl) {        curl_easy_cleanup(curl);    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -