質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

Q&A

解決済

1回答

2847閲覧

LWPにて「Bad hostname」

ksnv35kj

総合スコア10

Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

0グッド

0クリップ

投稿2019/06/21 00:33

perlで外部ドメインへリクエストを投げようとしたところ、
下記エラーが発生しています。

perl

1# Create a user agent object 2 use LWP::UserAgent; 3 $ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0; 4 my $ua = LWP::UserAgent->new( 5 ssl_opts => { 6 verify_hostname => 0, 7 protocols_allowed => [ 'http', 'https' ] , 8 SSL_verify_mode => IO::Socket::SSL::SSL_VERIFY_NONE, 9 10 }, 11 ); 12 $ua->agent("MyApp/0.1 "); 13 14 # Create a request 15 my $req = HTTP::Request->new(POST => 'http://search.cpan.org/search'); 16 $req->content_type('application/x-www-form-urlencoded'); 17 $req->content('query=libwww-perl&mode=dist'); 18 19 # Pass request to the user agent and get a response back 20 my $res = $ua->request($req); 21 22 # Check the outcome of the response 23 if ($res->is_success) { 24 info_log("result:".$res->content); 25 } 26 else { 27 info_log("result:".$res->status_line); 28 }

エラー内容

[INFO] result:500 Can't connect to search.cpan.org:80 (Bad hostname) [INFO] $VAR1 = bless( { '_content' => 'Can\'t connect to search.cpan.org:80 (Bad hostname) LWP::Protocol::http::Socket: Bad hostname \'search.cpan.org\' at /data/powercms/mt/extlib/LWP/Protocol/http.pm line 51, <FH> line 2. ', '_rc' => 500, '_headers' => bless( { 'client-warning' => 'Internal response', 'client-date' => 'Fri, 21 Jun 2019 00:28:43 GMT', 'content-type' => 'text/plain' }, 'HTTP::Headers' ), '_msg' => 'Can\'t connect to search.cpan.org:80 (Bad hostname)', '_request' => bless( { '_content' => 'query=libwww-perl&mode=dist', '_uri' => bless( do{(my $o = 'http://search.cpan.org/search')}, 'URI::http' ), '_headers' => bless( { 'user-agent' => 'MyApp/0.1 libwww-perl/6.05', 'content-type' => 'application/x-www-form-urlencoded' }, 'HTTP::Headers' ), '_method' => 'POST' }, 'HTTP::Request' ) }, 'HTTP::Response' );

$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;
でホスト名の検証は無効にできると思ったのですが。。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tetsunosuke

2019/06/21 01:47

PERL_LWP_SSL_VERIFY_HOSTNAME は証明書に関連することで、 今回のエラーは...どうなんでしょう。接続できていないようなメッセージにも見えます。 プロキシ環境であったりしませんか? 他のホストへの接続は可能ですか? 手元で検証したところ(info_logという関数はなかったのでそこを削りましたが)うまく動いたように思います。(301 Moved Permanentlyが返ってくる)
ksnv35kj

2019/06/21 01:53

他のホストへの接続もいろいろ試したのですが駄目でした…。 プロキシ環境ではありません。 ブラウザ上でperlを実行できるサイトにて動作確認したところ動きました。 自分の環境の何が邪魔しているのかわかれば良いのですが。。
suama

2019/06/21 02:40 編集

> 他のホストへの接続もいろいろ試したのですが駄目 curlコマンドなどが使えて、そちらではOKでしょうか? /data/powercms/ とあるので、推測ですが、tetsunosukeさんのコメントされている通りなにかプロキシ環境下か特殊なサイト(ホスティングされたところなど)でしょうか? (完全自前の環境でなく、ホスティングやクラウドサービスの環境下なら、なにかドキュメントがあるのかもしれないかな?と思いました)
tetsunosuke

2019/06/21 04:36

なるほど・・・。ブラウザ等ではもちろん接続できるんですよね。 そうなるとPerlのプログラムからのみアクセスできない、ということですか・・・。ちょっと思い当たる点がないですね。 同じようなこと言ってる人もいますが... http://www.justskins.com/forums/bad-hostname-error-from-34320.html suama さんの記載のように、動作させている環境から他の方法での接続ができるかどうか?については確認したいですね。
ksnv35kj

2019/06/21 04:49

引き続き調査中ですが、 curlを使用するとhttpにはアクセスできるのですが httpsのサイトにリクエストを投げると 「curl: (6) Could not resolve host: www~」と返されました。
ksnv35kj

2019/06/21 04:59

suamaさんの言う通り、powercmsを使用しているためそちらのドキュメントも確認してみます。
suama

2019/06/21 05:06 編集

curlやwgetのようなツールからも、httpsだけがうまくいかないと、サーバ?の問題な気もしますね。 curl -I -v --ipv4 https://search.cpan.org/ など、-vオプション(詳細)とか、--ipv4 とかで、もう少し詳細な情報が出るかもしれませんね。 (CPANのサイトだけでこうなるのか、他httpsなサイトは大丈夫かどうかも、一旦curlで念の為確認するといいかもしれません)
ksnv35kj

2019/06/21 05:33 編集

httpsサイトは他もダメでした。 curl -I -v --ipv4 https://search.cpan.org/ を実行すると * Could not resolve host: search.cpan.org Name or service not known * Closing connection 0 という結果が返されました
ksnv35kj

2019/06/21 05:56

度々すみません。 どうやら「etc/resolv.conf」に「nameserver 8.8.8.8」を追記すれば良いみたいです。 現状、書き込み権限がないため後日試してみます。
ksnv35kj

2019/06/21 07:29

上記試しましたが結局名前解決できないようです…
suama

2019/06/21 15:49

セットアップなどの際にはhttpsのサイトに接続するのはよくあるので、なにかプロキシを通しているのかなとは思いますが、ちょっとここまでで。 コマンドで env と入力した際に、環境変数にPROXY といった値のものが出ないでしょうか? たとえば、OSの情報とか、クラウド上の環境(サーバ)なのか、お手元にあるPCからなのか、といったものがあるといいかも。
suama

2019/06/24 06:30

proxyがやはり必要なのですね。curlでの実行のは、コマンドライン引数でプロキシを渡すか、環境変数で渡せば大丈夫でしたでしょうか。 Perlのコードに関しても、基本は環境変数を見に行ったりするとは思います。 環境がないので何ともためせませんが、こちらも参考になるでしょうか。 https://qiita.com/debug-ito/items/4b3fec645f15af9b4929
ksnv35kj

2019/06/24 06:38

ありがとうございます。 貼って頂いた記事も試したのですが、 「名前またはサービスが不明です」というエラーが発生しています。 DNSの名前解決の問題かなと思っています。 プロキシサーバーに対するpingは通りますが、nslookupはタイムアウトします。 ネットワーク周りはほぼ知識がないのでざっくりとしか説明できません…。
suama

2019/06/24 07:25

curlでの実行でプロキシを設定した場合は大丈夫でしょうか? とにかくこちらが前提になるので、こちらが大丈夫ならあとは設定次第かなと思います。 セットアップ時にはなんらかのhttpsのサイトからのリソースのダウンロードがあるはずなので、接続できなことはないと思いますが...。 あとはサーバ管理者様、インフラ周りの担当(サポート)の方に伺うといいかと思います。 このくらいで精一杯ですみません。
ksnv35kj

2019/06/24 08:26

送信成功しました! suamaさんの言う通り、プロキシの設定を細かく見ていたところ、 ソース内にプロキシ認証のユーザー名とパスワードを書くことで送信できました。 (力業ですが…) つたない説明に対して明確な回答を頂きありがとうございました!!
suama

2019/06/24 09:09

よかったですね!こちらこそ回答側に書かずに失礼しました。
guest

回答1

0

自己解決

ソース内にプロキシ認証のユーザー名とパスワードを書くことで送信できました。

投稿2019/06/24 23:38

ksnv35kj

総合スコア10

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問