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

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

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

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

Java

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

解決済

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

s1170022
s1170022

総合スコア0

HTTP

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

Java

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

1回答

0評価

1クリップ

518閲覧

投稿2020/05/17 09:59

編集2022/01/12 10:58

お世話になります。

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

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

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

Java

public static void exec(URL url, String user, String password, String content) throws IOException { HttpsURLConnection http = null; try { http = (HttpsURLConnection)url.openConnection(); http.setRequestMethod("POST"); http.setRequestProperty("Authorization", "Basic " + new String(Base64.encode((user + ":"+ password).getBytes()),StandardCharsets.UTF_8)); http.setDoInput(true); http.setDoOutput(true); http.setRequestProperty("Accept-Language", "jp"); http.setRequestProperty("Content-Type","text/xml;charset=utf-8"); http.connect(); OutputStream os = http.getOutputStream(); PrintWriter writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(os, "UTF-8"))); writer.print(content); writer.flush(); writer.close(); os.close(); if (http.getResponseCode() == HttpURLConnection.HTTP_OK || true) { try (InputStreamReader isr = new InputStreamReader(http.getInputStream(), StandardCharsets.UTF_8); BufferedReader reader = new BufferedReader(isr)) { String line; while ((line = reader.readLine()) != null) { System.out.println(line); } } } } catch (Exception e) { throw e; } finally { http.disconnect(); } }

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

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

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

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

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

YT0014
YT0014

2020/05/17 10:43

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

2020/05/17 12:34

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

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

HTTP

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

Java

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