プロが教えるわが家の防犯対策術!

ASP.NET(c sharp)、.netフレームワーク2.0環境です。

認証(ベーシック認証)付きのREST APIを使いたいのですが、
リクエストの投げ方が理解できず困っています。
URLを指定してリクエストを投げると動くものなのですが…。

使い方としては、
・POSTリクエストを使用
・"item"をキーにして、対象になるURLの配列を指定
とのことです。
{
"item" : [
"http://www.yahoo.co.jp/test1.jpg",
"http://www.google.co.jp/test2.jpg"
]
}
↑サンプルとして載っていました

以下の通り作ってみましたが、うまく動きません。
URLの配列指定がうまく出来ていないのではないかと思うのですが、
方法を教えていただけないでしょうか。
宜しくお願いします。

//HttpWebRequestの作成
WebRequest webreq = WebRequest.Create("https://api.test.com");
webreq.Method = "POST";
//認証の設定
webreq.Credentials = new System.Net.NetworkCredential("test@test.com", "testpass");
//POSTするデータ
string postData = "item=http://www.yahoo.co.jp/test1.jpg";
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
webreq.ContentType = "application/json";
webreq.ContentLength = byteArray.Length;
Stream dataStream = webreq.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
WebResponse response = webreq.GetResponse();
dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();

reader.Close();
dataStream.Close();
response.Close();

このQ&Aに関連する最新のQ&A

A 回答 (1件)

postDataがどう見てもJSON形式では無いです。


string postData = @"{
""item"": [
""http://www.yahoo.co.jp/test1.jpg""
]
}";
のように,正しく要求された形のJSONを送る必要があるのではないかと。
# APIが公開されている実サイトが書かれていないので,想像でしか書けませんが。

この回答への補足

https://api.ccu.akamai.com/ccu/v2/docs/index.html

apiはこれなんです。
正しくはobjectなんですが、ご指摘の通りJSON形式にして、見直してみました。

しかし、要求が不適切(400)と出てしまいました。

補足日時:2014/05/08 13:37
    • good
    • 0
この回答へのお礼

すみません、見直してみたところうまくリクエストが返ってきました。
大変助かりました、ありがとうございました。

お礼日時:2014/05/08 13:39

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QASP.NET C#でPOST受信

WebサーバのPost受信を行う際に、
Request["parameter"]
とすると、POSTを受信できますが、
GETのパラメータがあると、GETを優先して受信してしまいます。

GETのみだと、
Request["parameter"]でも
Request.QueryString["parameter"]でも
受信可能です。

GETパラメータがあっても、POSTのみを受信する方法はあるのでしょうか?

Aベストアンサー

Request.Formからはとれませんか。
http://msdn.microsoft.com/ja-jp/library/system.web.httprequest.form.aspx

Qファイルのダウンドードでエラー

ファイルのダウンドードでエラー

あるサイトを参考にファイルをダウンドードするプログラムを組んだのですが、
「リモート サーバーがエラーを返しました: (401) 許可されていません 」
のエラーが出てしまいます。

調べてはいますが、どう直せばいいのか分からない状況です。
どなたか教えてください。


以下ソース(C#です)
------------------------------------------------------------------
System.Net.WebClient wc = new System.Net.WebClient();
string uri = "http://192.168.0.xx/TestService/Excel/pick.xls";
string file = "pick.xls";
wc.DownloadFile(uri,file);
wc.Dispose();
------------------------------------------------------------------



エラー内容
------------------------------------------------------------------
リモート サーバーがエラーを返しました: (401) 許可されていません

説明: 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。

例外の詳細: System.Net.WebException: リモート サーバーがエラーを返しました: (401) 許可されていません


------------------------------------------------------------------

ファイルのダウンドードでエラー

あるサイトを参考にファイルをダウンドードするプログラムを組んだのですが、
「リモート サーバーがエラーを返しました: (401) 許可されていません 」
のエラーが出てしまいます。

調べてはいますが、どう直せばいいのか分からない状況です。
どなたか教えてください。


以下ソース(C#です)
------------------------------------------------------------------
System.Net.WebClient wc = new System.Net.WebClient();
string uri = "http://192.168.0.xx/TestService/Exc...続きを読む

Aベストアンサー

追加
権限ではない場合もあるようです(参考にしたサイトのミスかも)

>あるサイトを参考に

あるサイトでミスがあり、開発チームにて修正作業を実行した事例があります。
参考にしたサイトとは?

参考URL:http://developer.amazonwebservices.com/connect/thread.jspa?threadID=37704&tstart=0

Qpingでポートの指定

pingでIPアドレスを指定して、通信できるかどうかというのは
よく使いますが、pingでポートを指定して応答するかどうかは調べられるのでしょうか?

よろしくお願いします

Aベストアンサー

pingを含むICMPというプロトコルは、OSIの7レイヤで言うところのL2(同一セグメント内通信)とL3(IPルーティングされた通信)の両方にまたがる、ちょっと珍しいプロトコルです。

IPアドレスは指定できますが、別サブネットに属するIPアドレスに到達できればL3通信、できなければゲートウェイと呼ばれる同一サブネットに属する中継装置からの回答を得るという点でL2(MAC通信ではなく、同一セグメント内通信という意味)通信です。

ポート番号はL4で使用されるアドレスですから、L4機能の疎通確認はping(を含むICMP)ではできません。

FTPの疎通確認であれば、クライアントからサーバに対するTCP/21通信(FTP-CMD)が可能であること(サーバからクライアントへのTCP/21からの応答を含む)+サーバからクライアントに対するTCP/20通信(FTP-DATA)が可能であること(クライアントからサーバへのTCP/21からの応答を含む)が必要でしょう。

監視ソフトによるものであれば、
・クライアントからサーバへのログイン(TCP/21)
・クライアントからサーバへのlsの結果(TCP/20)
で確認すればよいでしょう。

pingを含むICMPというプロトコルは、OSIの7レイヤで言うところのL2(同一セグメント内通信)とL3(IPルーティングされた通信)の両方にまたがる、ちょっと珍しいプロトコルです。

IPアドレスは指定できますが、別サブネットに属するIPアドレスに到達できればL3通信、できなければゲートウェイと呼ばれる同一サブネットに属する中継装置からの回答を得るという点でL2(MAC通信ではなく、同一セグメント内通信という意味)通信です。

ポート番号はL4で使用されるアドレスですから、L4機能の疎通確認はping(を含む...続きを読む

Q日付型のフィールドに空白を入れる方法を教えてください

ASP(VBScript)でSQLサーバにINSET INTO文を使ってデータを格納しているのですが、日付の部分がNULLの時、「1900/1/1」が入ってしまいます。
そのまま、空白を入れる方法はどうやったらよろしいのでしょうか?

TABLE1の内容は
番号|内容|日付です。

INSERT INTO TABLE1 VALUES ( 1, 'あいう', '')

結果
1|あいう|1900/1/1

Aベストアンサー

あとは、プログラムの書き方次第ですね、、、


If hensu=Null Or hensu="" Then
dt = "NULL"
Else
dt = "'" & hensu & "'"
End IF

E_SQL = "INSERT INTO TABLE1 VALUES & _
"( 1,'あいう', " & dt& ")"
の様に書きます。

QCloseとDisposeの違い

みなさまこんばんわです。よろしくお願い申し上げます。

VB.NET 2008でコーディングしています。
CloseとDisposeの違いについて教えていただきたいのです。

これらのメソッドは、開いたファイルを閉じるときなどにも使いますが、今回お尋ねするのは、フォームを閉じるとき、しかも、自ら呼び出すとき(Me.Close() と、Me.Dispose() )のみに限ったこととしてお話しさせていただきます。

たとえば、ShowDialog() で呼び出したフォームは、そのフォーム内でMe.Close() しても、プロセスは残り、たとえば、タイマーコントロールのイベントに記述していますと、それは実行され続けます。

これを防ぐために、Me.Dispose() を使います。すると、きれいにプロセスは終了し、イベントは発生しない模様です。

そこで、「フォームを閉じる」意味のMe.Close() をすべてMe.Dispose() に変えてしまいました。確実にプロセスを破棄出来ると思ったからです。Webで調べると、違いは「再利用できる、できないの違い」という答えがありましたが、それはきっと、ファイルやオブジェクトのことで、フォームの場合は、再びShowまたはShowDialogで表示させることは可能でしたので、特に問題は感じていませんでした。

ところが、アプリケーション設定で、「最後のフォームを閉じるとき」にアプリケーションがシャットダウンする設定になってるのに、シャットダウンしてくれないことが起こりました。調べてみると、Me.Dispose() が原因。Me.Close() に変えるとうまくいきました。

わけわからなくなってきました。。。

ちなみに、その残ったフォームは、スタートアップフォームであり、別のフォームからShowまたはShowDialogメソッドで呼び出したものではありません。

ここで4つの仮説を立ててみました。

1. ShowDialogで呼び出したフォームは、Me.Dispose()、Showで呼び出した、あるいは、スタートアップフォームは、Me.Close() すれば破棄できる

2. ShowDialogで呼び出したフォームは、Me.Dispose()、スタートアップフォームは、Me.Close()、Showで呼び出したフォームは、どちらでも、破棄できる

3. 呼び出し方ではなく、別の要因が存在する

4. 併記する必要がある場合がある

Me.Close()
Me.Dispose()

または、

Me.Dispose()
Me.Close()



どれが正しいのでしょうか?どなたがご存じの方がいらっしゃいましたら、ご教授いただけませんでしょうか? どうぞよろしくお願い申し上げます。ありがとうございました。

みなさまこんばんわです。よろしくお願い申し上げます。

VB.NET 2008でコーディングしています。
CloseとDisposeの違いについて教えていただきたいのです。

これらのメソッドは、開いたファイルを閉じるときなどにも使いますが、今回お尋ねするのは、フォームを閉じるとき、しかも、自ら呼び出すとき(Me.Close() と、Me.Dispose() )のみに限ったこととしてお話しさせていただきます。

たとえば、ShowDialog() で呼び出したフォームは、そのフォーム内でMe.Close() しても、プロセスは残り、たとえば、...続きを読む

Aベストアンサー

Me.Close()
Me.Dispose()
は根本的に違うものです。

formについて、Close()メソッドはフォームの表示を終了させるメソッドです。

ほかのクラスも同様。すべてのDispose()メソッドについて、これはインスタンスの破棄を明示的に行うものです。

>再利用できる、できないの違い

Dispose()はインスタンスが破棄されるため、再びコンストラクタを用いて、インスタンスを生成しないいけません。

一方Close()はインスタンスが残っているので、それを利用することができます。

>1. ところが、アプリケーション設定で、「最後のフォームを閉じるとき」にアプリケーションがシャットダウンする設定になってるのに、シャットダウンしてくれないことが起こりました。調べてみると、Me.Dispose() が原因。
Me.Close() に変えるとうまくいきました。

通常はどちらでもうまくいきます。

>2. ShowDialogで呼び出したフォームは、Me.Dispose()、スタートアップフォームは、Me.Close()、Showで呼び出したフォームは、どちらでも、破棄できる

ShowDialogの場合は、メソッド内部で、ハンドルが破棄されているため、Close()メソッドの際にDispose()メソッドが呼び出されます。

>3. 呼び出し方ではなく、別の要因が存在する

そう思います。

>4. 併記する必要がある場合がある

インスタンスを明示的に破棄したほうがよい場合は多く存在します。
Disposeが使えるメンバはIDisposableをインターフェースとして持っているメンバです。
これらのメンバは、外部とのやり取りを行うものが多くあります。
たとえばSQLClientに含まれるようなメンバです。

外部とのコネクションを確実に破棄を保障してほしいなどという場合がありますよね、このようなときに使用します。

Using構文を使用するのとまったく同じ理由になります。
正確にはUsing構文を使用できるメンバには条件があります、IDisposableをインターフェースとして持っているメンバに限るというものです。

ほかにもガーベージコレクタによるファイナライズを伴うかどうかという違いがあります。
Disposeの場合はファイナライズが同時に行われるため、使用していたメモリ空間を開放することができます。

上記のような理由により、
Me.Close()
Me.Dispose()
は両方書いたほうがよいと思います。

蛇足ですが、
Me.Dispose()
Me.Close()
はエラーになります。
Me.Dispose()により、Me本体(インスタンス)は削除されてしまいます。
存在しないMeに対してCloseメソッドを要求することはできないためです。

Me.Close()
Me.Dispose()
は根本的に違うものです。

formについて、Close()メソッドはフォームの表示を終了させるメソッドです。

ほかのクラスも同様。すべてのDispose()メソッドについて、これはインスタンスの破棄を明示的に行うものです。

>再利用できる、できないの違い

Dispose()はインスタンスが破棄されるため、再びコンストラクタを用いて、インスタンスを生成しないいけません。

一方Close()はインスタンスが残っているので、それを利用することができます。

>1. ところが、アプリ...続きを読む

QPOSTで送信するとエラーになる

 ボタンでHPに飛ばしているのですが、エラーになる場合があって困っています。

 コードは以下の通りです。
   <FORM action="http://www.xxx.yy.zz/" method="POST">
    <INPUT type="submit" value="HPへ">
   </FORM>

 指定したURLによってエラーになるところとならないところがあるのですが、これはサーバ内のどこの設定によるものなのでしょうか?
 (試しにgooやYahooを指定するとOKなのですが、googleやlycosはダメのようです。
 エラーの場合、「400 BadRequest」や「HTTP 405 - リソース未許可」などが出ます。
 しかもlycosでは、自社エラーページを表示しているのですが、どういう設定なのでしょう?)

 現行ではmethod="GET"としている(これなら上記エラーは出ない)のですが、これだとURLの後ろに「?」がついてしまって、これによってエラーになってしまうHPがまれにあって、これまた困っています。
 (JavaScriptは使用不可で、文字リンクもダメという方針なので、画像リンクしかないかなぁと思っているのですが。)

 もしJavaScriptも画像も使わずに、ボタンで、URLに?を出さない方法があったら、是非教えてください。
 (1番知りたいのは、↑これです)

以上よろしくお願い致します。

 ボタンでHPに飛ばしているのですが、エラーになる場合があって困っています。

 コードは以下の通りです。
   <FORM action="http://www.xxx.yy.zz/" method="POST">
    <INPUT type="submit" value="HPへ">
   </FORM>

 指定したURLによってエラーになるところとならないところがあるのですが、これはサーバ内のどこの設定によるものなのでしょうか?
 (試しにgooやYahooを指定するとOKなのですが、googleやlycosはダメのようです。
 エラーの場合、「400 BadRequest」や「HTTP...続きを読む

Aベストアンサー

こんにちは、honiyonです。

 POSTを、index.htmlに対して試してみました。

 結果は、
  The requested method POST is not allowed for the URL /index.html.
 という事で、察するに *.htmや、*.htmlに対しては POSTメソッドは門前払いという事になりそうです。 CGIに対してしかダメという事になりそうですね~。
 使用したサーバーは、Linux + Apache です。

 送信すべきデータがある/ない以前の問題でしたね(^^;
 今回のケースではPOSTメソッドは無理、という事になりそうですね。 少なくともApacheの設定で、「POSTを全てのケースで許可」というのはなかったと思います。 他のWWWサーバーで、HTMLに対してもPOSTを許可してくれるものがあればよいのですが(^^;

 参考になれば幸いです(..

QOracle(オラクル)で、日付時刻型の検索方法について

質問させていただきます。
データベースはオラクルを使っていて、
SQL文で、抽出するときにエラーが出て困っています。

日付時刻型が「2005/05/26 19:13:00」という感じで入ってます。
2005/05/26 を抽出したいのですが、
BETWEEN '2005/05/26 00:00:00' AND '2005/05/26 23:59:59'

だと、エラーでできません。
どなた様か、ご教授よろしくお願いしますm(_ _)m

Aベストアンサー

日付検索を行う場合は、以下のように書式を含める必要があります。

col BETWEEN TO_DATE('2005/05/26 00:00:00','YYYY/MM/DD HH24:MI:SS') AND TO_DATE('2005/05/26 23:59:59','YYYY/MM/DD HH24:MI:SS')

ただ、厳密には

col >= TO_DATE('2005/05/26', 'YYYY/MM/DD')
AND
col < TO_DATE('2005/05/27', 'YYYY/MM/DD')

と書くべきでしょうね。

QMAX値を条件にデータを取得するには?

SQL文で困っています。
ご教授下さい。


下記のようなデータがあった場合、それぞれの区分毎に
年月が最大(最新)のデータを取得したいです。
(実際には1レコードにその他項目があり、それらも取得します。)
<検索対象データ>
区分 年月   金額
-----------------------------
A   200412  600
A   200503  560
B   200311  600
B   200508  1000
B   200504  560
C   200508  400
C   200301  1100


<取得したいデータ>

区分 年月   金額
-----------------------------
A   200503  560
B   200508  1000
C   200508  400

よろしくお願いします。

Aベストアンサー

テーブル名をXXXとすると次のようなSQLでよいと思います。(最善の方法かどうかは自信がないですが)

select B.* from (select 区分, max(年月) as 年月 from XXX group by 区分) As A
inner join XXX as B on A.区分 = B.区分 and A.年月 = B.年月
order by B.区分

Qポートの80と443

こちらのサービス(https://secure.logmein.com/)を利用すると、インターネットを見られるサーバーのポートの80と443が空いていればルータやファイアウォールに特段の設定なく外部からサーバーを操作できるそうですが、逆にサーバーのポートの80や443を空けることには何か危険性があるのでしょうか。

Aベストアンサー

ポート80は一般的なHTTP、ポート443はHTTPSです。
この2つのポートがあいていなければインターネット接続(WEBブラウジング)は出来ません。
ですから、ほとんどのファイアウォールでこのポートは開いています。(インターネット接続を制限している社内LANでは当然閉じていますが)

ちなみに、よく使うポートとしてはFTPで20、21、SMTP(送信メール)で25、受信メールPOP3で110あたりです。セキュリティポリシー上、この辺は制限される事も多いですが、HTTP 80、HTTPS(暗号化用)443は通常閉じません。


危険性?
WEBプロトコルを使ってFTP的なファイル転送(WebDAV)やVPN等も出来るようになっています。当然そこにはある種の危険はつきものですが、WEBブラウジングに伴う危険と大きく変わりません。ウィルス等に感染していればこの2つのポートだけでも相当危険でしょうね。

参考まで。

QC#「オブジェクト参照が必要です」(初心者)

Visual C# 2008を学習中なんですが、とりあえず何か作ってみようと思って、パラパラマンガに挑戦してみました。
Form1にpictureBox1を作り、waitを入れてイメージを書き換えるという単純なものです。
ところが実行しようと思ったら、「静的でないフィールド、メソッド、またはプロパティ’WindowsFormApplication1.Form1.pictureBox1’でオブジェクト参照が必要です」というエラーが出ます。その際のフォーカスは、main()内の
Form1.pictureBox1.image = Image.FromFile("motion1.png");
”Form1.pictureBox1”に当てられています。

何が原因と考えられるでしょうか。
もし情報不足であればご指摘いただくか、あるいはこの目的においてやらなければいけないこと、を大雑把に教えていただくだけでも幸いです。
よろしくお願いします。

Aベストアンサー

main()内に記述されているとのことですので、たぶん、
Form1.pictureBox1.Image=Image.FromFile("motion1.png");
Application.Run(new Form1());
と書いているのではないでしょうか?

連載 改訂版 C#入門 第3章 クラスとインスタンス
http://www.atmarkit.co.jp/fdotnet/csharp_abc2/csabc2_003/cs2_003_01.html#cs0302

ここであるように、オブジェクト指向にはクラスとインスタンスという概念があります。
今のコードでは、Form1クラスを操作しようとしているのでそのようなエラーが出ます。

具体的な解決方法としては、PictureBoxに初期画像を設定する処理をForm1のコンストラクタでやるのがいいと思います。
その際、redfox63さんがおっしゃられるように
this.pictureBox1
と記述することが必要です。(thisは自分自身のインスタンスを指します)

後は、Windowsフォームで一定間隔での処理をするための「Timerコンポーネント」について調べてみたらいいと思います。

タイマにより一定時間間隔で処理を行うには?(Windowsタイマ編)
http://www.atmarkit.co.jp/fdotnet/dotnettips/372formstimer/formstimer.html

MSDNライブラリ Timerクラス
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.timer.aspx

参考URL:http://www.atmarkit.co.jp/fdotnet/csharp_abc2/index/

main()内に記述されているとのことですので、たぶん、
Form1.pictureBox1.Image=Image.FromFile("motion1.png");
Application.Run(new Form1());
と書いているのではないでしょうか?

連載 改訂版 C#入門 第3章 クラスとインスタンス
http://www.atmarkit.co.jp/fdotnet/csharp_abc2/csabc2_003/cs2_003_01.html#cs0302

ここであるように、オブジェクト指向にはクラスとインスタンスという概念があります。
今のコードでは、Form1クラスを操作しようとしているのでそのようなエラーが出ます。

具...続きを読む


人気Q&Aランキング