• 締切済み

curl実行結果が404で戻ってきてしまう理由

お力をお貸しください。 あるサーバ(自社サーバ)から違うサーバ(他社のサーバ)にcurlでアクセスしようとしています。 自社のサーバのコマンドラインより、 $curl http://他社のサーバ とアクセスすると、レスポンスとして返ってくるのは <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>404 Not Found</title> </head><body> <h1>Not Found</h1> <p>The requested URL /~~/ was not found on this server.</p> </body></html> という文字列です。 ブラウンザのURL欄に、curlで送信したURLとまったく同じhttp://他社のサーバの URLを入力すれば、きちんとブラウザ上にレスポンスが返ってきます。 自社のサーバのコマンドラインより行うと404のレスポンスが帰ってきてしまう要因として、 考えられるものはどんな理由でしょうか? 大変お手数おかけ致しますが、ご教授いただけますと幸いです。 何卒よろしくお願いいたします。

みんなの回答

  • kusa_mochi
  • ベストアンサー率76% (1599/2089)
回答No.1

自分はcurlを使った事は無いが、  ・curlのインストールそのものに失敗している  ・ソフトの不具合・設定上のミス等でネットに送り出されるurlにゴミがくっついている 等が考えられると思う。 そのPCから送り出されるパケットをキャプチャーして、生のデータを見れば分かるのではないかと思う。 (ブラウザからアクセスする場合とcurlからアクセスする場合の両方のケースのパケットを見れば良いのでは)

myaa_myu
質問者

お礼

大変遅くなりましたがご回答ありがとうございました。 他社のサーバで、受付可能なIPアドレスを制限しているのが原因のようでした。 お手数おかけしました。

関連するQ&A

  • PHPでcurl実行

    お世話になります。 PHPでcurlを使用して外部のサーバ上にあるプログラムを実行しようとしています。 $command = "curl -m 10 http://~~?param=~~~"; $result = shell_exec(command); このようにプログラム上で記述しているのですが、うまく動作しません。 正常な動作としては、処理を行った後に「TRUE」という文字列が返ってくるはずなのですが、 画面上に$resultの値を出力してみると、「~~~</body></html>」と、 なぜかHTMLタグが返ってきており、正常な処理が行われません。 ためしにコマンドライン上より curl -m 10 http://~~?param=~~~ を実行すると、「TRUE」という文字が表示されてきちんと動作しますので、外部に置いてある プログラムの問題ではなく、こちらで作成したPHPでの記述の仕方に問題があると思われるのですが どこを修正するべきか、アドバイス等いただけないでしょうか。

    • 締切済み
    • PHP
  • phpのcurlでのエラー

    ローカル、IIS8.5+PHP5.6環境で、PHPのcurlを用いてPDFファイルをアップロードするとエラーが出ます。 エラーは以下のようなものです。 === {"files":[{"name":"1425191187-473","size":221,"type":"multipart\/form-data; boundary=------------------------c4894a433c24bba9","error":"Filetype not allowed"}]} === どの点が問題なのかご教示いただけないでしょうか? PHP5.6の設定では、php.iniの「extension=php_curl.dll」の「;」のみを外しました。 また、ローカルPCにダウンロードしたcurl.exeコマンドからはアップロードできることを確認しました。 コマンド:「curl -F "files[]=@C:\Users\***\Desktop\***.pdf;type=application/pdf http://127.0.0.1/***/upload」 アップロードできないPHPソースは以下となります。 === $oname = '@C:\Users\***\Desktop\***.pdf;type=application/pdf'; $files = array( 'files[]' => $oname ); $url = 'http://127.0.0.1/***/upload'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_ENCODING, 'UTF-8'); curl_setopt($ch, CURLOPT_POSTFIELDS, $files); curl_exec($ch); curl_close($ch); ===

    • 締切済み
    • PHP
  • さくらレンタルサーバーでシェルが実行されない

    さくらレンタルサーバーのスタンダードを借り、 cakephpのWebアプリケーションを勉強している者です。 cronに #!/bin/sh curl http://(ユーザ名).sakura.ne.jp/xxx/hogehoge のようなシェルを設定したのですが、 curl: not found と出力され実行できません。 telnetからは実行されたのでパスは問題ないと思います。 さくらサーバーではcurlは実行できないのでしょうか? また、どうすれば上記のようなシェルは実行できるのでしょうか? よろしくお願いします。

  • file get contentsが使用禁止だった

    ### 前提・実現したいこと file_get_contensがサーバーのセキュリティ上禁止だったのでcurlという関数で 「取り出したいデータのファイル」にある <div class="menu">から</div>までをget通信でedit.phpにurlを渡し、内容を取り出したいのですが、mb_subster等を使いとりだしを試みましたが分からなかったので取り出しかたを教えてください。 よろしくお願いします。 ソースコード <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>取り出したいデータのファイル</title> </head> <style> </style> <body> <form method="get" action="../edit.php"> <button type="submit" name="edit" value="<?php echo (empty($_SERVER['HTTPS']) ? 'http://' : 'https://').$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];?>">編集</button> </form> <div class="menu"> <h1>メニュー</h1> <p>カレー</p> </div> </body> </html> edit.php <!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml"> <head> <meta charset="utf-8" /> <title>別のファイルを表示したいファイル</title> </head> <style> </style> <body> <?php echo $_REQUEST['edit']; $url = $_REQUEST['edit']; $conn = curl_init(); // cURLセッションの初期化 curl_setopt($conn, CURLOPT_URL, $url); // 取得するURLを指定 curl_setopt($conn, CURLOPT_RETURNTRANSFER, true); // 実行結果を文字列で返す。 $res = curl_exec($conn); echo ($res); curl_close($conn); //セッションの終了 ?> </body> </html>

    • ベストアンサー
    • PHP
  • FireFox、Operaで出力するとhtmlソースが出てしまう

    http://oshiete1.goo.ne.jp/kotaeru.php3?q=554339 を読んだのですが、きちんと text/htmlで出力しているにも関わらず、FireFox、Operaで開くとhtmlソースが出てしまいます。 (win IE、Mac Safariではhtmlとして(きちんと)開かれる) ソースは以下の通りです。 (テスト用で必ずエラーページを出力するようになっています。) --------------------- #!/usr/local/bin/perl require 'cgi-lib.pl'; require 'jcode.pl'; &ReadParse(*form); $userID = "$form{'id'}"."\n"; open(KEIJI,"<id.dat") || die "File Open Error"; @all = <KEIJI>; close(KEIJI); foreach(@all){ #ワードを配列に追加 push @wordList,$_; } $messageID = 0; foreach(@wordList){ if($userID eq $_){ $messageID = $count; last; } $count = $count + 1; } if($messageID eq 0){ &error_output; exit; } sub error_output{ print "Contest-type:text/html\n\n"; print << "EOM"; <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>404 Not Found</title> </head><body> <h1>Not Found</h1> <p>The requested URL was not found on this server.</p> </body></html> EOM } ------------------------ 要は「このファイルはhtmlです」とプラウザーに 伝えれればいいとは思うのですが、もしお分かりの 方がいらっしゃいましたら、教えていただければ ありがたいです。 よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • headで書かれたJSをdivで実行

    よろしくお願いいたします <head>内に書いたjavascriptを、<body>内にある<div>で実行するにはどうしたらいいのでしょうか。その場合に、特定のURLには表示させないという処理を加えたいです。 例えば //////// 1. <head>内に特定のURL「http://特定のURL.html」以外で、<div class="aaa"></div>のある場所でdocument.write <p>表示した</p>を書けと書いて 2. <body>内に<div class="aaa"></div>を記述 3. <body>内で特定のURL「http://特定のURL.html」以外のページで<p>表示した</p>が表示される /////// よいう感じです。よろしくお願いいたします m(_ _)m

  • LocationでのPOSTの方法

    AサーバーからBサーバーへHTMLのformにてPOSTデータを送り Bサーバーで処理して、header("Location:で再びAサーバーに戻す処理をしたいのですがうまくいきません Aサーバー <form method="post" action="Bサーバー"> <input type="text" name="sample"> Bサーバ curl_setopt($handle, CURLOPT_URL, "Aサーバ"); curl_setopt($handle, CURLOPT_HEADER, false); curl_setopt($handle, CURLOPT_POST, true); curl_setopt($handle, CURLOPT_POSTFIELDS, , "smaple=" . $_POST['sample']); curl_setopt($handle, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($handle); curl_close($handle); header("Location: Aサーバ"); このようにcurlで送る設定をしているのですがPOSTのデータは戻って来ません アドバイスをお願いできないでしょうか。

    • ベストアンサー
    • PHP
  • ジャバスクリプトが起動しない。

     さっそく試してみたのですが。スクリプトが起動しません。 実験の手順は、 1、404エラーページのソースを開いて、 2、スクリプトコードを書き込む、 3、apply Changes ボタンで実行。です、 テストソース <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>404 Not Found</title> <script type="text/javascript"> function jikoku() { dd = new Date(); document.F1.T1.value = dd.toLocaleString(); window.setTimeout("jikoku()", 1000); } var w1doc = windwo.open("http://kikitai.teacup.com/"); </script> </head><body> <h1>Not Found</h1> <form name="F1" action="#"> <input type="text" name="T1" size=50> </form> //var w1doc = windwo.open("?http://kikitai.teacup.com/index.php3test.html"); 22 回 テスト </body></html> *****  結果 Not Found //var w1doc = windwo.open("?http://kikitai.teacup.com/ >  ここにフォームウインドーは表示されている index.php3test.html"); 22 回 テスト    ジャバスクリプトが、無視されている?? ようなのですが、  どこが、  間違っているのでしょうか?  追伸、ティーカップの確認画面には、URLの前に、はてなマークが挿入去るのでしょうか?  もしそうだとすると、投稿テキストには、無いです。

  • PHPが実行できない

    CentOSでPHPの勉強をしています。 ですが、実行ができません。というより、ファイルを見つけることができません。 以下のようにやりました。 まずrootでログインし、httpdを起動させました。 [root@new-host ~]# /etc/init.d/httpd start httpd を起動中: 次にstudentというホストに切り替え、「studentのホーム」というフォルダにtest.phpを作成しました。 この後、 http://new-host/~student にアクセスすればtest.phpが選択できるかと思ったのですがそうすると Not Found The requested URL /~student was not found on this server. Apache/2.2.3 (CentOS) Server at new-host Port 80 と書いてある404 Not Foundの画面になってしまいます。 どこがいけないのでしょうか。よろしくお願いします。

    • ベストアンサー
    • PHP
  • Hyper Estraierのcgiが結果表示をしてくれません。

    Windows2000サーバー・Apache2.0で動作しているHyper Estraierのcgiを、設定ファイルやインデクスともどもWindows Server2003のIISのサーバに移動したところ、cgiにアクセスしても、結果表示に何も表示されません。 (真っ白で、ソースを見ると <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML><HEAD> <META http-equiv=Content-Type content="text/html; charset=shift_jis"></HEAD> <BODY></BODY></HTML> とのみ出力。) 試しにテスト用のcgiを同じところにおいてみたら、そちらは動作するのですが・・・ 考えられる原因は何でしょうか?

    • 締切済み
    • CGI