Есть приложение на Laravel. К нему прописано API по которому с микроконтроллера отсылаются данные методом Post и делается запись в базу. Через Postman все работает
Сайт залит на хостинг с Plesk, ничего не настраивал - нет навыков администрирования.
При запросе с микроконтроллера возвращает ошибку 400
22:35:30.686 -> w=1&c=11
22:35:40.787 ->
22:35:40.787 -> HTTP/1.1 400 Bad Request
22:35:40.822 -> Date: Tue, 14 Jan 2020 20:35:40 GMT
22:35:40.857 -> Server: Apache
22:35:40.857 -> Content-Length: 226
22:35:40.892 -> Connection: close
22:35:40.934 -> Content-Type: text/html; charset=iso-8859-1
22:35:41.000 ->
22:35:41.000 -> <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
22:35:41.000 -> <html><head>
22:35:41.033 -> <title>400 Bad Request</title>
22:35:41.079 -> </head><body>
22:35:41.079 -> <h1>Bad Request</h1>
22:35:41.079 -> <p>Your browser sent a request that this server could not understand.<br />
22:35:41.182 -> </p>
22:35:41.182 -> </body></html>
роуты laravel обычные (напомню, код работает через Postman)
Route::post('/v1/attr/{id}','API\WorkdayController@store');
Могу контроллер показать, но там неважная логика работы с базой. Обрабатывается Request. Со стороны ардуино все тоже должно быть рабочим, кроме обращения к моему API Подключена библиотека inetGSM и inet.cpp с простой функцией
inet.httpPOST("antosipos.com.es", 80, "/api/v1/attr/c019999a", (const char*)buf, msg, 50);
Где в buf передаваемые параметры (w=1&c=11 или {"w":"1","c":"11"})
сама функция (не уверен что это полезная информация):
int InetGSM::httpPOST(const char* server, int port, const char* path, const char* parameters, char* result, int resultlength)
{
boolean connected=false;
int n_of_at=0;
char itoaBuffer[8];
int num_char;
char end_c[2];
end_c[0]=0x1a;
end_c[1]='\0';
while(n_of_at<3){
if(!connectTCP(server, port)){
#ifdef DEBUG_ON
Serial.println("DB:NOT CONN");
#endif
n_of_at++;
}
else{
connected=true;
n_of_at=3;
}
}
if(!connected) return 0;
gsm.SimpleWrite("POST ");
gsm.SimpleWrite(path);
gsm.SimpleWrite(" HTTP/1.1\nHost: ");
gsm.SimpleWrite(server);
gsm.SimpleWrite("\n");
gsm.SimpleWrite("Content-Type: application/x-www-form-urlencoded\n");
gsm.SimpleWrite("Content-Length: ");
itoa(strlen(parameters),itoaBuffer,10);
gsm.SimpleWrite(itoaBuffer);
gsm.SimpleWrite("\n\n");
gsm.SimpleWrite(parameters);
gsm.SimpleWrite("\n\n");
gsm.SimpleWrite(end_c);
switch(gsm.WaitResp(10000, 10, "SEND OK")){
case RX_TMOUT_ERR:
return 0;
break;
case RX_FINISHED_STR_NOT_RECV:
return 0;
break;
}
delay(50);
#ifdef DEBUG_ON
Serial.println("DB:SENT");
#endif
int res= gsm.read(result, resultlength);
//gsm.disconnectTCP();
return res;
}
Есть предположение что на хостинге нет каких-либо разрешений или настройки не все сделаны, по-этому добавлю .htaccess
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
Может еще какая-нибудь информация нужна, я не знаю что делать. Прямого доступа к микроконтроллеру нет, к хостингу - есть
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
SQLSTATE[IMSSP]: This extension requires the Microsoft ODBC Driver for SQL Server to communicate with SQL ServerAccess the following URL to download the ODBC Driver for SQL Server for x64: https://go
Существует Entity в которой нужно реализовать связь OneToOne, но проблема в том, что связь между ними осуществляется по полям не являющимся ключевыми...
Нашёл документацию как можно обновить товары через загрузку YML-файла (https://sellaliexpress