NEWS
[SOLVED] require request ersetzen durch httpPost in JS
-
@blackmike hab inzwischen auch versucht das Konstrukt nachzuvollziehen und bei Mozilla developers und stackoverflow passende Passagen gefunden, aber mangels js Kenntnissen nicht zuordnen können was mit dem body bei httpPost passiert, der ja tatsächlich gesendet werden kann/muss.
Die Doku hatte ich leider auch nicht gefunden.
-
Dank dem Doku Link von MCU, ohne den das nicht geklappt hätte, habe ich nun den Frame, um request Posts in das neue httpPost umzusetzen.
Funktional war die Benutzung des Body sowie eigene Header.
Hat also erfolgreich geklapptDas adäquate Konstrukt schaut dann so aus:
function device_realqueryV2 (SerNr) { const body= '{"sn": "'+SerNr+'", "variables": []}' const headers={headers: GetAuth (apikey,path_real_query,lang)} httpPost (domain+path_real_query,body,headers,function (err,response) { var jdev= response.data log (response.data) }) }
Thnx für die Hilfestellung
Black
-
@blackmike sagte in require (request) ersetzen durch "httpPost" in javascript:
const body= '{"sn": "'+SerNr+'", "variables": []}'
Du kannst auch direkt ein Objekt übergeben und musst nicht so komisch JSON-Strings zusammenbauen.
function device_realqueryV2 (SerNr) { httpPost( domain + path_real_query, { sn: SerNr, variables: [] }, { headers: GetAuth(apikey,path_real_query,lang) }, (err, response) => { const data = response.data; log (data); } ); }
-
Generell gute Idee...
Aber der body MUSS ein string sein. Als json objekt bekommen ich ein Fail bei der Abfrage.
Black
-
@blackmike sagte in [SOLVED] require request ersetzen durch httpPost in JS:
MUSS ein string sein. Als json objekt
JSON ist auch einfach nur ein String.
Muss als Objekt aber auch gehen - dann macht die http-Funktion die JSON-Konvertierung für Dich.
-
Ging auch... Fehler von mir, es reichte nicht aus, nur die Aussen delimiter wegzunehmen... mit korrektem Object klappte die Abfrage
Thnx, Blck
-
Hallo Zusammen,
ich versuche auch gerade von "request" wegzukommen.
Leider scheitere ich bei httpPost um den TNES von Tasker zu erreichen.
Javascript 8.6.0Funktionierender Request:
request.post({url:'http://192.168.178.51:8765',form:{ sayit: "Sprachausgabe" }},function(error, response, body) { if (error) log(error, 'error'); });
Nicht funktionierender httpPost:
httpPost('http://192.168.178.51:8765', { sayit: "Sprachausgabe" }, { timeout: 5000 }, (error, response) => { if (!error) { console.log(response.statusCode); console.log(response.data); console.log(response.headers); } else { console.error(error); } });
Als Fehler kommt ein Timeout:
javascript.0 2024-06-23 11:39:32.376 error script.js.common.Sayit: timeout of 5000ms exceeded javascript.0 2024-06-23 11:39:32.375 error script.js.common.Sayit httpPost(url=http://192.168.178.51:8765, error=timeout of 5000ms exceeded)
Timeout habe ich wie ersichtlich schon testweise hochgedreht.
Liegt es evtl. am Port?Für Tipps danke ich schon einmal im Voraus.
-
@DerGraf123
Bei request gab es noch das Attribut "form". Versuche malhttpPost('http://192.168.178.51:8765', {form: {sayit: "Sprachausgabe"}}, { timeout: 5000 }, (error, response) => {
oder?
httpPost('http://192.168.178.51:8765', {form: {sayit: "Sprachausgabe"}, timeout: 5000 }, (error, response) => {
-
@paul53 Erst kommen die Post-Parameter, dann die Optionen für den Request. War also oben schon richtig.
httpPost('http://192.168.178.51:8765', { sayit: 'Sprachausgabe' }, { timeout: 5000 }, (error, response) => {
https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#httppost
Im Verbose-Mode sieht man dann auch sehr gut, wie der Request zusammengebaut wird.
-
@paul53 Mit deiner Idee und dem Attribute "form" bekomme ich zwar keinen Timeout mehr, eine Sprachausgabe erfolgt aber nicht. Timeout Variable habe ich wieder rausgenommen, da 2000ms mehr als ausreichend sein sollte.
httpPost('http://192.168.178.51:8765', { form: {sayit: 'Sprachausgabe' }}, (error, response) => { if (!error) { console.log(response.statusCode); console.log(response.data); console.log(response.headers); } else { console.error(error); } });
javascript.0 12:09:24.356 info script.js.common.Sayit: 200 javascript.0 12:09:24.356 info script.js.common.Sayit: <html><head><head><body><h1>Hello, World</h1></body>Header<br/>content-length : 29 remote-addr : 192.168.178.252 http-client-ip : 192.168.178.252 host : 192.168.178.51:8765 content-type : application/json connection : keep-alive accept-encoding : gzip, compress, deflate, br accept : application/json, text/plain, */* user-agent : Mozilla/5.0 (X11; Linux i686; rv:109.0) Gecko/20100101 Firefox/121.0 <br/>----<br/>method = POST<br/>uri = /<br/>Params<br/>NanoHttpd.QUERY_STRING : null<br/></html> javascript.0 12:09:24.356 info script.js.common.Sayit: Object [AxiosHeaders] { 'content-type': 'text/html', date: 'Sun, 23 Jun 2024 10:09:24 GMT', connection: 'keep-alive', 'content-length': '496' }