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

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

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

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

1287閲覧

AtomPubAPIのPOST通信をJavaから利用する方法

s1170022

総合スコア25

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

1クリップ

投稿2020/05/17 09:59

編集2020/05/17 10:02

お世話になります。

livedoorブログをJavaから連携して記事の取得、自動投稿をするためにAtomPubAPIを利用しています。

APIはGET,POST,PUT,DELETEの4つがあり、そのうちGETで記事の一覧を取得することはできました。
POSTで記事投稿、PUTで記事更新を行ったのですが、いずれもうまく実行できておりません。

POSTを送信するソースが以下になります。

Java

1 2 3 public static void exec(URL url, String user, String password, String content) throws IOException { 4 5 HttpsURLConnection http = null; 6 7 try { 8 http = (HttpsURLConnection)url.openConnection(); 9 http.setRequestMethod("POST"); 10 http.setRequestProperty("Authorization", "Basic " + new String(Base64.encode((user + ":"+ password).getBytes()),StandardCharsets.UTF_8)); 11 http.setDoInput(true); 12 http.setDoOutput(true); 13 http.setRequestProperty("Accept-Language", "jp"); 14 http.setRequestProperty("Content-Type","text/xml;charset=utf-8"); 15 http.connect(); 16 17 OutputStream os = http.getOutputStream(); 18 PrintWriter writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(os, "UTF-8"))); 19 writer.print(content); 20 writer.flush(); 21 writer.close(); 22 23 os.close(); 24 25 if (http.getResponseCode() == HttpURLConnection.HTTP_OK) { 26 try (InputStreamReader isr = new InputStreamReader(http.getInputStream(), 27 StandardCharsets.UTF_8); 28 BufferedReader reader = new BufferedReader(isr)) { 29 String line; 30 while ((line = reader.readLine()) != null) { 31 System.out.println(line); 32 } 33 } 34 } 35 36 } catch (Exception e) { 37 throw e; 38 } finally { 39 http.disconnect(); 40 } 41 } 42

引数のcontentには
http://help.blogpark.jp/archives/52372407.html
に記載されている[記事の投稿方法]-XMLをユーザ名等を書き換えたものが格納されています。

上記を実行した結果、HTTPレスポンスとして400 BadRequestが返却されてしまいます。
GETの処理はできているので認証部分には問題ありません。

どなたか解決方法をご存知の方、ご教示お願いできませんでしょうか。

よろしくお願いいたします。

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

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

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

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

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

YT0014

2020/05/17 10:43

POSTは、記事の投稿なので、contentの中に、記事内容(タイトルや本文など)がないと、BadRequestを返す可能性があるのではないでしょうか? 記事内容が含まれているようなら、呼出し元のcontentの内容を質問欄に追記してください。
s1170022

2020/05/17 12:34

ありがとうございます。 XMLの中身を見直し、 http://help.blogpark.jp/archives/52288925.html こちらの旧APIに記載されているXML形式で実施したところ201 Createdで返却され、実際のブログにも反映されました。
guest

回答1

0

自己解決

http://help.blogpark.jp/archives/52288925.html
こちらの旧APIに記載されているXML形式で実施したところ201 Createdで返却され、実際のブログにも反映されました。

投稿2020/05/17 12:35

s1170022

総合スコア25

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問