如何在Perl中发出XML请求-需要帮助吗?

如何在Perl中发出XML请求-需要帮助吗?,xml,perl,perl-module,Xml,Perl,Perl Module,由于对Perl和XML不熟悉,有谁能指导我做以下工作: 我必须编写一个Perl代码,该代码应该: 建立联系 获取connectionId连接的响应,并将其存储在变量中 密切联系 输入: 应发布XML请求。请求类型为http 我随身携带的XML语法 有谁能指导我应该采取什么步骤来满足上述要求 提前谢谢 添加代码: use LWP::UserAgent; use HTTP::Request::Common; # The xml_request my $xml_req = "<?xml vers

由于对Perl和XML不熟悉,有谁能指导我做以下工作: 我必须编写一个Perl代码,该代码应该:

  • 建立联系

  • 获取connectionId连接的响应,并将其存储在变量中

  • 密切联系

  • 输入:

    应发布XML请求。请求类型为http

    我随身携带的XML语法

    有谁能指导我应该采取什么步骤来满足上述要求

    提前谢谢

    添加代码:

    use LWP::UserAgent;
    use HTTP::Request::Common;
    # The xml_request
    my $xml_req = "<?xml version=1.0 encoding UTF-8?>
                <!ELEMENT drl (openconnection)>
                <!ATTLIST drl
                 mode normal
                 connectionid null
                >
                <!ELEMENT openconnection EMPTY>
                <!ATTLIST openconnection
                username admin
                password admin
                ></drl>";
    my $ua = LWP::UserAgent->new();
    my $response = $ua->post("http://XX.X.X.X:XXXX/lab/v1_2/connection/openConnectionRequest.dtd", Content => $xml_req);
    
    使用LWP::UserAgent;
    使用HTTP::Request::Common;
    #xml\u请求
    我的$xml_req=”
    ";
    my$ua=LWP::UserAgent->new();
    我的$response=$ua->post(“http://XX.X.X.X:XXXX/lab/v1_2/connection/openConnectionRequest.dtd“,内容=>$xml_-req);
    

    输出是一个散列,但是如果它应该返回,并且id是一个no.。我哪里出错了?

    根据请求的性质(大小、内容、结构在多大程度上取决于输入),有几种不同的方法来实现这一点

    最简单的方法是将请求存储在程序中的字符串中,放入变量,然后发送

    #!/usr/bin/perl
    use strict; use warnings;
    use LWP::UserAgent;
    
    my ($param1, $param2) = (1, 2);
    
    my $xml = <<XMLREQUEST
    <request>
      <param1>$param1</param1>
      <param2>$param2</param2>
    </request>
    XMLREQUEST
    ;
    
    my $ua = LWP::UserAgent->new;
    my $response = $ua->post('http://www.yourdomain.com/', Content => $xml);
    if ($response->is_success) {
      print $response->decoded_content;  # or whatever
    }
    else {
      die $response->status_line;
    }
    
    它接受
    $vars
    hashref并将其内容放在模板中相应的位置<代码>$var->{'username'}在模板显示的
    {$username}
    处填写。本例中的模板是从程序下方指定的
    数据
    部分读取的。一个好方法是为您需要执行的每种请求类型提供一个模板文件。如果请求包含可选元素,
    Text::Template
    可以通过条件语句(将Perl代码放入模板中)处理此问题

    <>如果你喜欢更动态的方法,考虑简单的任务。请记住,
    XML::Simple
    不是最好的XML模块。还有一些更健壮的,比如
    XML::Twig

    #!/usr/bin/perl
    use strict; use warnings;
    use LWP::UserAgent;
    use XML::Simple;
    
    my $xmlHash = {
      'request' => {
        'auth' => [ 
          {
            'username' => 'jon', 
          },
          {
            'password' => 'verysecure',
          },
        ],
        'param1' => {
          'content' => 'a lot of content for param1',
          'foo'     => 'fofofofooo',
        },
        'param2' => {
          'content' => 'even more of content for param2',
          'bar'     => 'bar bar bar',
        },
        'param3' => {
          'content' => 'some content for param3',
        },
      }
    };
    
    my $xml = XMLout($xmlHash, KeepRoot => 1);  
    
    my $ua = LWP::UserAgent->new;
    my $response = $ua->post('http://www.yourdomain.com/', Content => $xml);
    if ($response->is_success) {
      print $response->decoded_content;  # or whatever
    }
    else {
      die $response->status_line;
    }
    
    您应该通读
    XML::Simple
    的文档,因为它有时有点奇怪

    如果您想解析请求的回复(也是XML),那么也可以使用
    XML::Simple
    XMLin()
    在这里起作用



    如果您想要实现一个非常复杂的web服务,请查看或(如果您有一个大型WSDL文件)。

    用于发出HTTP请求。文档非常详尽。如果您能展示到目前为止您所做的尝试以及您遇到的具体问题,这会有所帮助。欢迎访问so。也许你应该像提问之前一样阅读。我在下面贴了一个简短的指南。请考虑@dgw的建议,以备将来提问。我想对否决票提出一些建设性的批评。我已经添加了代码。这返回的响应为HTTP:HTTP::response=HASH(0x1c6c3600)。如何获得实际响应。我的意思是如何解码上述响应的内容?您使用了哪一个
    HTTP::Response=HASH(0x1c6c3600)
    表示您拥有该类的对象。检查文档。说
    print$response->decoded_content
    就足够了。@simbabque..我试过了,但结果是XML响应,但在上面的代码中,我正在做openconnection,结果是connectionid。。。我是不是做了什么错事才得到这个?我不明白。请将您使用的代码完全按照您使用的代码发布。还有,谢谢。
    #!/usr/bin/perl
    use strict; use warnings;
    use LWP::UserAgent;
    use XML::Simple;
    
    my $xmlHash = {
      'request' => {
        'auth' => [ 
          {
            'username' => 'jon', 
          },
          {
            'password' => 'verysecure',
          },
        ],
        'param1' => {
          'content' => 'a lot of content for param1',
          'foo'     => 'fofofofooo',
        },
        'param2' => {
          'content' => 'even more of content for param2',
          'bar'     => 'bar bar bar',
        },
        'param3' => {
          'content' => 'some content for param3',
        },
      }
    };
    
    my $xml = XMLout($xmlHash, KeepRoot => 1);  
    
    my $ua = LWP::UserAgent->new;
    my $response = $ua->post('http://www.yourdomain.com/', Content => $xml);
    if ($response->is_success) {
      print $response->decoded_content;  # or whatever
    }
    else {
      die $response->status_line;
    }