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

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

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

Bottleは、PythonのWebサーバです。1つのPythonファイルで構成されており、非常に軽量。Web APIの作成や導入が簡単で、DjangoやFlaskに比べ使いやすくシンプルなことが特徴です。

cURL

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

Webサーバー

Webサーバーとは、HTTPリクエストに応じて、クライアントに情報を提供するシステムです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

8055閲覧

POSTでのcurlコマンドの使い方

trafalbad

総合スコア303

Bottle

Bottleは、PythonのWebサーバです。1つのPythonファイルで構成されており、非常に軽量。Web APIの作成や導入が簡単で、DjangoやFlaskに比べ使いやすくシンプルなことが特徴です。

cURL

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

Webサーバー

Webサーバーとは、HTTPリクエストに応じて、クライアントに情報を提供するシステムです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2017/05/10 07:37

編集2017/05/10 08:41

curlコマンドからjsonを使用してhttpをPOSTしようと思っています。pythonのbottleを使おうと思っているのですが初心者のため、使い方が全くわかりません。

質問1:
Qiitaに以下のようなcurlコマンドがありましたが、これは何を表していて何をしているのでしょうか?

curl http://localhost:8080/test.php -X POST -H "Content-Type: application/json" -d '{"key": "value"}'

質問2:
ちなみにこれをanacondaで実装すると「invalid syntax」とのエラーが出ました。どこが間違っているのでしょうか?

質問3:
pythonのbottleでコマンドを書こうと思っているのですが、上の
{"key": "value"}でvalueをシリアライズした分類器にかけてreponseを受け取りたいのですが、上記のcurlコマンド以外に必要なjsonコマンドは何がありますか?

コード

from bottle import route, run # -*- coding: utf-8 -*- import pandas as pd import numpy as np import matplotlib.pyplot as plt import json import csv from collections import OrderedDict from sklearn.externals import joblib #mecab from natto import MeCab nm = MeCab() print(nm) m = MeCab("-Owakati") MODEL_FILE='bays_model-2.csv' clf = joblib.load(MODEL_FILE) #前処理 f = open('baysweb_word.csv', 'r') line = json.load(f) dek_dic={} dek_dic={v:i for i, v in enumerate(line.drop("Unnamed: 0", axis=1).columns)} def func(x): if x == None: return 1 else: return 0 # NaN @route('/housmart', method="POST") def clean_name(): curl http://localhost:8080/housmart -X POST -H "Content-Type: application/json" -d '{"clean_buldingname": "ライオンズガーデン明大前パラダイム"}' dek_dic={} dek_dic={v:i for i, v in enumerate(line.drop("Unnamed: 0", axis=1).columns.T)} def func(x): if x == None: return 1 else: return 0 # NaN are=[] for n in nm.parse(clean_buildingname, as_nodes=True): if n.surface !="": are.append(n.surface) ree=[] for i, v in dek_dic.items(): for n in are: if i==n: ree.append(v) else: pass were=[] for i,v in dek_dic.items(): if v in ree: were.append(None) else: were.append(i) xx=pd.DataFrame(were).applymap(func).T clf.predict(xx)#予測 if clf.predict(xx)==1: return str(clean_buildingname) run(host='localhost', port=8080, debug=True)

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

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

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

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

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

guest

回答2

0

ベストアンサー

  • curlはOSのコマンドでHTTPクライアント
  • bottleはPythonのライブラリでHTTPサーバ

この2点から物事を整理すると良いと思います。目的はcurlでPOSTリクエストを送る(HTTPクライアント機能)なのでbottleうんぬん、anacondaもPythonなので全て不要です。

多分curlとは何か、OSのコマンドとは何か、を調べてから「どのように実現するか」を考えていくと良いと思います。

投稿2017/05/10 09:12

YouheiSakurai

総合スコア6142

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

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

trafalbad

2017/05/10 15:16

ターミナルでHTTPサーバへのリクエストをbottleで書いたファイル(HTTPサーバ)があります。それをターミナル上で実行するのと、ターミナルからcurlコマンドでPOSTリクエストを送る(HTTPクライアント)のは実行する順序があるのでしょうか?それとも全く別物なので、どちらか一つで完結するのでしょうか? ちなみに特定の単語をシリアライズしたベイズ分類器で予測することを想定しています、(単語を送る→予測結果を返す)
YouheiSakurai

2017/05/10 15:36

bottleで書いたHTTPサーバとcurlコマンドのHTTPクライアントは、全く別物なので別々に、手元で動かす時には普通、別々の2つのターミナル上で、1)サーバ、2)クライアントの順番に開始します。 大切な事なので2度書きます。HTTPサーバとHTTPクライアントは、手元で動かす時には普通、別々の2つのターミナル上で、1)サーバ、2)クライアントの順番に開始します。 「サーバ」とはリクエストを待ち受けるものなので先に開始する必要があります。「クライアント」とはリクエストを送るものなので後に開始する必要があります。 あとbottleはリクエストを書くためのライブラリではなく、リクエストに応じたレスポンスを書くためのものです。「HTTPサーバへのリスエストをbottleで書」くことはありません。
trafalbad

2017/05/10 15:56

大変よくわかりました!ありがとうございます!
guest

0

質問1:
-X (GET、POSTなどの)メソッド。 -dを指定しているので自動でPOSTとして動作するはず。(省略してもよい)
-H 追加するHTTPヘッダ。送信データがjsonであることを示す。"Content-Type: application/json"
-d 送信データ
参考:WebAPIリクエスト仕様書としてcurlコマンドのご提案

質問2:
curlはシェル(ターミナル)コマンドなので、pythonコード内ではそのまま実行することはできません。
が、かわりにpycurlモジュールを利用することはできます。
参考:PycURLでHTTPリクエストあれこれ

質問3:
質問の意図・内容が理解できませんので、回答は控えます。

投稿2017/05/10 08:11

can110

総合スコア38339

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

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

trafalbad

2017/05/10 08:40

質問2に関してなんですが、ターミナル上で実行したところ同様のエラーが出ました。python内では実行できないとのことですが、つまりroute以下の関数内で実装せずに外で実装すればいいのでしょうか? コードは質問欄に記載し直しておきますのでよろしくお願いします。 エラー File "bays.py", line 31 curl http://localhost:8080/housmart -X POST -H "Content-Type: application/json" -d '{"clean_buldingname": "ライオンズガーデン明大前パラダイム"}' ^ SyntaxError: invalid syntax
can110

2017/05/10 08:44

いやだからpythonコード内で書いてもだめですよ。「ls」とかと同じです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問