方法名称中发现无效字符。 HTTP方法名称必须是令牌,即使使用HTTP请求也可以保留

时间:2018-12-13 09:39:53

标签: perl http

我正在尝试对控制器进行预热,以使服务在每次部署期间都变热。

为此,我编写了如下的perl脚本:

#!perl
use strict;
use warnings;
use WWW::Mechanize;
use HTTP::Request;


my $ua = WWW::Mechanize->new();
my $r  = HTTP::Request->new(
    'GET' =>
'http://gaurav_setia.microsoft.com:8080/b2h/homepage?_encoding=UTF8&opf_redir=1&portalDebug=1',
    [
        'Connection' => 'Keep-Alive',
        'Via'        => 'HTTP/1.1 ShoppingSchedule',
        'Accept' =>
'text/x-html-parts,text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
        'Accept-Charset'  => 'UTF-8',
        'Accept-Encoding' => 'identity',
        'Accept-Language' => 'en-US',
        'Host'            => 'gaurav_setia.microsoft.com',
        'User-Agent' =>
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36',
        'Cookie' =>
        'Original-X-Forwarded-For'   => '10.45.103.166',
        'X-MS-Internal-Ip-Class' => 'rfc1918',
        'X-MS-Internal-Via' =>
          '1.1 us-beta-opf-1a-1-67440dc2.us-east-1.ms.com (OPF)',
        'X-MS-Urlspace'                => 'NoPageType',
        'X-MS-Portal-Customer-Id'         => 'AMY4OD2PMM9T31',
        'X-MS-Portal-Default-Merchant-Id' => 'BTLPDKIKX0DE41',
        'X-MS-Portal-Device-Attr'         => 'desktop',
        'X-MS-Portal-Language'            => 'en_US',
        'X-MS-Portal-Marketplace-Id'      => 'ATVPDKIKX0DER',
        'X-MS-Portal-Page-Type'           => 'AQGate',
        'X-MS-Portal-Request-Attr'        => 'internal, http, portal-debug',
        'X-MS-Portal-Session-Id'          => '1M0-493PO66-0596753',
        'X-MS-Portal-Ubid'                => '1P2-465OP632-8831161',
        'X-MS-Portal-User-Attr'           => 'business',
        'X-MS-Rid'        => 'G308MPK95BWTA69EY2MW',
        'X-Forwarded-For'  => '10.45.101.126',
        'X-Forwarded-Host' => 'development.ms.com',
        'X-Forwarded-Server' =>
'development.ms.com, b-hp-shpomnpng-na-2b-02af3555.us-west-2.amazon.com',
        'X-Original-Args'   => 'portalDebug=1',
        'X-Original-Method' => 'GET',
        'X-Original-Scheme' => 'http',
        'X-Original-Uri'    => '/',
    ],

);
my $res = $ua->request( $r, );

if ( $res->is_success() )
{
    print $response->is_success();
}

print $response->status_line;

此脚本应在每次部署后运行。

但是在catalina.out日志中,出现以下错误:

 Dec 13, 2018 9:08:11 AM org.apache.coyote.http11.AbstractHttp11Processor process
  INFO: Error parsing HTTP request header
   Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.
  java.lang.IllegalArgumentException: Invalid character found in method name. HTTP method names must be tokens
          at org.apache.coyote.http11.AbstractNioInputBuffer.parseRequestLine(AbstractNioInputBuffer.java:235)
          at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1055)
          at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684)
          at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1539)
          at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1495)
          at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
          at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
          at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
          at java.lang.Thread.run(Thread.java:748)

我找不到解决方法!

许多回答都说这是由于https / http问题引起的,但是我自己在这里进行了http呼叫!

1 个答案:

答案 0 :(得分:2)

在头文件堆中,您有以下内容:

'User-Agent' =>
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36',
'Cookie' =>
'Original-X-Forwarded-For'   => '10.45.103.166',

请注意,Cookie标头没有任何值。这意味着之后的所有标题都将是错误的(名称和值将被混淆)。

完全删除Cookie行或将其值设置为undef

'Cookie' => undef,

(最好将其删除)