初心者なので、質問の仕方がわかりづらかったらすみません。
以下のソースコードでコマンドプロンプトからcurlを打ちたいのですが、実行すると何も書かれていないメッセージボックスが出るだけです。。
pingで試したらできたので、おそらくコマンドプロンプトは開けています。
curl.exeはC:\Program Files\curl-7.69.1-win64-mingw\binにあります。
参考サイトは、
http://dobon.net/vb/dotnet/process/standardoutput.html
よろしくお願いします。
C#
1using System; 2using System.Collections.Generic; 3using System.ComponentModel; 4using System.Data; 5using System.Drawing; 6using System.Linq; 7using System.Text; 8using System.Threading.Tasks; 9using System.Windows.Forms; 10 11namespace curl_API 12{ 13 public partial class Form1 : Form 14 { 15 public Form1() 16 { 17 InitializeComponent(); 18 } 19 20 private void button1_Click_1(object sender, EventArgs e) 21 { 22 23 //Processオブジェクトを作成 24 System.Diagnostics.Process p = new System.Diagnostics.Process(); 25 26 27 //OutputDataReceivedイベントハンドラを追加 28 p.OutputDataReceived += p_OutputDataReceived; 29 30 //ComSpec(cmd.exe)のパスを取得して、FileNameプロパティに指定 31 p.StartInfo.FileName = 32 System.Environment.GetEnvironmentVariable("ComSpec"); 33 //出力をストリームに書き込むようにする 34 p.StartInfo.UseShellExecute = false; 35 p.StartInfo.RedirectStandardOutput = true; 36 p.StartInfo.RedirectStandardInput = false; 37 //ウィンドウを表示しないようにする 38 p.StartInfo.CreateNoWindow = true; 39 40 string cmd = "curl httpbin.org/ip"; 41 p.StartInfo.Arguments = @"/c " + cmd; 42 43 //起動 44 p.Start(); 45 46 //非同期で出力の読み取りを開始 47 p.BeginOutputReadLine(); 48 49 p.WaitForExit(); 50 p.Close(); 51 52 Console.ReadLine(); 53 54 55 56 } 57 //OutputDataReceivedイベントハンドラ 58 //行が出力されるたびに呼び出される 59 static void p_OutputDataReceived(object sender, 60 System.Diagnostics.DataReceivedEventArgs e) 61 { 62 //出力された文字列を表示する 63 MessageBox.Show(e.Data); 64 } 65 } 66} 67
「できません」じゃなく「何が起きているのか」を書いた方がいいです。
失礼しました!
修正しました!
非同期で書いているようですが、同期では取得できているのですか?
このコードも大本がコピペなので、非同期でしか試していません!
curl.exeはC:\Program Files\curl-7.69.1-win64-mingw\binにあります。
pathは通ってるんでしょうか?
コマンドプロンプトでコマンドを実行すると、期待値が取得できるので、パスが通っている認識です!
C:\Users\XXX>cd C:\Program Files\curl-7.69.1-win64-mingw\bin
C:\Program Files\curl-7.69.1-win64-mingw\bin>curl httpbin.org/ip
{
"origin": "165.76.168.60"
}
C:\Program Files\curl-7.69.1-win64-mingw\bin>
> cd C:\Program Files\curl-7.69.1-win64-mingw\bin
cd "C:\Program Files\curl-7.69.1-win64-mingw\bin"
じゃなくて?
っていうよりCDしてますね。
cd でカレントディレクトリ移動せずに
実行デキないならpath 通ってないです。
C# で Web サービスから IP を取るのに curl を使う必要は全く無いので、IP を取りたいのか curl を使いたいのか、どちらかはっきりさせたほうが良いと思います。
コピペしたなら必ず、くどいようですが、必ず、出典を明記してください。
回答1件
あなたの回答
tips
プレビュー