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

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

新規登録して質問してみよう
ただいま回答率
85.44%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Python

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

Q&A

解決済

1回答

1031閲覧

unityのC#でポスト通信でformを送りたいがエラーが出るのでエラーを解消したい。 python上で実現しているのでそれをC#で記述したい。

tarou---

総合スコア2

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Python

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

0グッド

0クリップ

投稿2023/03/13 17:24

編集2023/03/13 17:29

実現したいこと

unity上でcoeiroinkのローカルapiを使えるようにしたい

unityのunitywebrequestのPOST通信でform送信をしたいがエラーが出て動かないのでエラーを解消したい

前提

python上では実現できていて、pythonで書かれたものをC#に書き直して実現したい.

coeiroinkとは合成音声を作るものであり、エラー箇所が出るところの仕様としては
POST方式でパラメータ(form)をおくるとクリエが作成される。
送るformは{'text' :my_text,'speaker': speaker_id,'core_version':'0.0.0'}

このクリエを別のPOST送信で送信すると合成音声が返ってくるがここは質問に関係ない箇所なので省略している。

発生している問題・エラーメッセージ

HTTP/1.1 422 Unprocessable Entity

該当のソースコード

実現できているpython上での記述

python

1import requests 2import json 3 4url = 'http://localhost:50031/' 5query_p = 'audio_query' 6req_url = url + query_p 7# enable_interrogative_upspeak = '' 8 9v_name = "voice.wav" 10v_dir = "voices/" 11voice_pass = v_dir + v_name 12 13# APIに送信する情報 14def Params(message): 15 speaker_id = 0 16 #speaker_idには(重要)しゃべらせたいボイスのstyleIdを書いてください(上記はつくよみちゃんれいせいです)  17 my_text = message 18 #これが必要なformの情報 19 q_params = {'text' :my_text,'speaker': speaker_id,'core_version':'0.0.0'} 20 return q_params 21 22 23#POSTリクエストを送る(クエリを作成) 24def Post_RequestMQ(q_params): 25 response = requests.post(req_url, params = q_params) 26 res_data = response.json() 27# print(response.status_code) 28 29def Create_Voice(message): 30 q_params = Params(message) 31 my_query = Post_RequestMQ(q_params) 32 33Create_Voice("aaa")

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using System.Text; 5using UnityEditor; 6using UnityEngine.Networking; 7 8public class Voice : MonoBehaviour 9{ 10 11 private string url = "http://localhost:50031/audio_query"; 12 13 } 14 15 public IEnumerator Post_RequestMQ() 16 { 17 18 WWWForm form = new WWWForm(); 19 form.AddField("text","今日もお疲れ"); 20 form.AddField("speaker", 0); 21 form.AddField("core_version", "0.0.0"); 22 23 using (UnityWebRequest MQrequest = UnityWebRequest.Post(url, form)) 24 { 25 yield return MQrequest.SendWebRequest(); 26 27 if (MQrequest.result != UnityWebRequest.Result.Success) 28 { 29 Debug.Log(MQrequest.error); 30 } 31 else 32 { 33 Debug.Log("Form upload complete!"); 34 } 35 MQrequest.Dispose(); 36 } 37 } 38 39 public void CreateVoice(string message) 40 { 41 StartCoroutine(Post_RequestMQ()); 42 } 43}

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

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

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

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

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

guest

回答1

0

ベストアンサー

coeiroinkとやらは知りませんが、少なくとも質問にあるPythonとC#のプログラムとでは、パラメータの渡し方が全然違います。

python

1 response = requests.post(req_url, params = q_params)

requests.postparamsキーワード引数でパラメータを渡すと、URLにクエリ文字列を付け加わる形になります。

>>> import requests >>> r = requests.post('http://localhost:5000/', params={'a': 'hoge', 'b': 'piyo'}) >>> print(r.url) 'http://localhost:5000/?a=hoge&b=piyo'

一般的にPOSTメソッドでFormデータを渡す場合には、params引数ではなくdata引数で指定するのですが。
ただ、params引数で正しくレスポンスが返るのであれば、そのような仕様なのかもしれません。
この辺りは、coeiroinkとかの仕様を確認してください。

とりあえずUnity側をPython側に合わせたければ、以下を参考にすればいいと思います。
(GETメソッドですが、要はURLにパラメータを付加すればいいわけなので、同じ話です)

投稿2023/03/14 14:10

katsuko

総合スコア3510

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.44%

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

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

質問する

関連した質問