[DEV] first post methode availlable
This commit is contained in:
parent
c936af3c64
commit
488658aecf
@ -21,7 +21,8 @@ static std::map<int32_t, std::string> getErrorList(void) {
|
|||||||
return g_list;
|
return g_list;
|
||||||
}
|
}
|
||||||
|
|
||||||
enet::Http::Http(void) {
|
enet::Http::Http(void) :
|
||||||
|
m_keepAlive(false) {
|
||||||
m_connection.setPort(80);
|
m_connection.setPort(80);
|
||||||
m_connection.setServer(false);
|
m_connection.setServer(false);
|
||||||
}
|
}
|
||||||
@ -42,7 +43,12 @@ bool enet::Http::connect(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void enet::Http::setSendHeaderProperties(const std::string& _key, const std::string& _val) {
|
void enet::Http::setSendHeaderProperties(const std::string& _key, const std::string& _val) {
|
||||||
m_sendHeader.insert(make_pair(_key, _val));
|
auto it = m_sendHeader.find(_key);
|
||||||
|
if (it == m_sendHeader.end()) {
|
||||||
|
m_sendHeader.insert(make_pair(_key, _val));
|
||||||
|
} else {
|
||||||
|
it->second = _val;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string enet::Http::getSendHeaderProperties(const std::string& _key) {
|
std::string enet::Http::getSendHeaderProperties(const std::string& _key) {
|
||||||
@ -63,6 +69,10 @@ bool enet::Http::reset(void) {
|
|||||||
m_sendHeader.clear();
|
m_sendHeader.clear();
|
||||||
m_receiveHeader.clear();
|
m_receiveHeader.clear();
|
||||||
setSendHeaderProperties("User-Agent", "e-net (ewol network interface)");
|
setSendHeaderProperties("User-Agent", "e-net (ewol network interface)");
|
||||||
|
if (m_keepAlive == true) {
|
||||||
|
setSendHeaderProperties("Connection", "Keep-Alive");
|
||||||
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool enet::Http::setServer(const std::string& _hostName) {
|
bool enet::Http::setServer(const std::string& _hostName) {
|
||||||
@ -89,7 +99,7 @@ bool enet::Http::receiveData(void) {
|
|||||||
std::string header;
|
std::string header;
|
||||||
// Get data
|
// Get data
|
||||||
char data[1025];
|
char data[1025];
|
||||||
len = 1;
|
int32_t len = 1;
|
||||||
bool headerEnded = false;
|
bool headerEnded = false;
|
||||||
while ( m_connection.getConnectionStatus() == enet::Tcp::statusLink
|
while ( m_connection.getConnectionStatus() == enet::Tcp::statusLink
|
||||||
&& len > 0) {
|
&& len > 0) {
|
||||||
@ -135,21 +145,31 @@ bool enet::Http::receiveData(void) {
|
|||||||
// parse header :
|
// parse header :
|
||||||
std::vector<std::string> list = std::split(header, '\n');
|
std::vector<std::string> list = std::split(header, '\n');
|
||||||
headerEnded = false;
|
headerEnded = false;
|
||||||
|
m_receiveHeader.clear();
|
||||||
for (auto element : list) {
|
for (auto element : list) {
|
||||||
if (headerEnded == false) {
|
if (headerEnded == false) {
|
||||||
header = element;
|
header = element;
|
||||||
headerEnded = true;
|
headerEnded = true;
|
||||||
} else {
|
} else {
|
||||||
//ENET_INFO("header : '" << element << "'");
|
|
||||||
size_t found = element.find(":");
|
size_t found = element.find(":");
|
||||||
if (found == std::string::npos) {
|
if (found == std::string::npos) {
|
||||||
// nothing
|
// nothing
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
//ENET_INFO("header : key='" << std::string(element, 0, found) << "' value='" << std::string(element, found+2) << "'");
|
ENET_VERBOSE("header : key='" << std::string(element, 0, found) << "' value='" << std::string(element, found+2) << "'");
|
||||||
m_receiveHeader.insert(make_pair(unEscapeChar(std::string(element, 0, found)), unEscapeChar(std::string(element, found+2))));
|
m_receiveHeader.insert(make_pair(unEscapeChar(std::string(element, 0, found)), unEscapeChar(std::string(element, found+2))));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
for (auto &it : m_receiveHeader) {
|
||||||
|
if (it.first == "Connection") {
|
||||||
|
if (it.second == "close") {
|
||||||
|
ENET_DEBUG("connection closed by remote :");
|
||||||
|
m_connection.unlink();
|
||||||
|
} else {
|
||||||
|
ENET_TODO("manage connection type : '" << it.second);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
/*
|
/*
|
||||||
ENET_INFO("header : '" << header << "'");
|
ENET_INFO("header : '" << header << "'");
|
||||||
for (auto &it : m_receiveHeader) {
|
for (auto &it : m_receiveHeader) {
|
||||||
@ -204,7 +224,7 @@ bool enet::Http::get(const std::string& _address) {
|
|||||||
req += _address;
|
req += _address;
|
||||||
}
|
}
|
||||||
req += " HTTP/1.0\n";
|
req += " HTTP/1.0\n";
|
||||||
setSendHeaderProperties("Lenght", "0");
|
setSendHeaderProperties("Content-Length", "0");
|
||||||
// add header properties :
|
// add header properties :
|
||||||
for (auto &it : m_sendHeader) {
|
for (auto &it : m_sendHeader) {
|
||||||
req += escapeChar(it.first) + ": " + escapeChar(it.second) + "\n";
|
req += escapeChar(it.first) + ": " + escapeChar(it.second) + "\n";
|
||||||
@ -243,21 +263,30 @@ bool enet::Http::post(const std::string& _address, const std::map<std::string, s
|
|||||||
}
|
}
|
||||||
body += escapeChar(it.first) + "=" + escapeChar(it.second);
|
body += escapeChar(it.first) + "=" + escapeChar(it.second);
|
||||||
}
|
}
|
||||||
|
return post(_address, "application/x-www-form-urlencoded", body);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool enet::Http::post(const std::string& _address, const std::string& _contentType, const std::string& _data) {
|
||||||
|
m_receiveData.clear();
|
||||||
|
m_receiveHeader.clear();
|
||||||
|
if (connect() == false) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
std::string req = "POST http://" + m_connection.getHostName();
|
std::string req = "POST http://" + m_connection.getHostName();
|
||||||
if (_address != "") {
|
if (_address != "") {
|
||||||
req += "/";
|
req += "/";
|
||||||
req += _address;
|
req += _address;
|
||||||
}
|
}
|
||||||
req += " HTTP/1.0\n";
|
req += " HTTP/1.0\n";
|
||||||
setSendHeaderProperties("Lenght", std::to_string(body.size()));
|
setSendHeaderProperties("Content-Type", _contentType);
|
||||||
|
setSendHeaderProperties("Content-Length", std::to_string(_data.size()));
|
||||||
// add header properties :
|
// add header properties :
|
||||||
for (auto &it : m_sendHeader) {
|
for (auto &it : m_sendHeader) {
|
||||||
req += escapeChar(it.first) + ": " + escapeChar(it.second) + "\n";
|
req += escapeChar(it.first) + ": " + escapeChar(it.second) + "\n";
|
||||||
}
|
}
|
||||||
// end of header
|
// end of header
|
||||||
req += "\n";
|
req += "\n";
|
||||||
req += body;
|
req += _data;
|
||||||
|
|
||||||
int32_t len = m_connection.write(req, false);
|
int32_t len = m_connection.write(req, false);
|
||||||
ENET_VERBOSE("read write=" << len << " data: " << req);
|
ENET_VERBOSE("read write=" << len << " data: " << req);
|
||||||
@ -268,6 +297,7 @@ bool enet::Http::post(const std::string& _address, const std::map<std::string, s
|
|||||||
return receiveData();
|
return receiveData();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
std::string enet::Http::dataString(void) {
|
std::string enet::Http::dataString(void) {
|
||||||
std::string data;
|
std::string data;
|
||||||
for (auto element : m_receiveData) {
|
for (auto element : m_receiveData) {
|
||||||
|
13
enet/Http.h
13
enet/Http.h
@ -21,6 +21,15 @@ namespace enet {
|
|||||||
virtual ~Http(void);
|
virtual ~Http(void);
|
||||||
private:
|
private:
|
||||||
enet::Tcp m_connection;
|
enet::Tcp m_connection;
|
||||||
|
private:
|
||||||
|
bool m_keepAlive;
|
||||||
|
public:
|
||||||
|
void setKeepAlive(bool _keepAlive) {
|
||||||
|
m_keepAlive = true;
|
||||||
|
}
|
||||||
|
bool getKeepAlive(void) {
|
||||||
|
return m_keepAlive;
|
||||||
|
}
|
||||||
private:
|
private:
|
||||||
// key, val
|
// key, val
|
||||||
std::map<std::string, std::string> m_sendHeader;
|
std::map<std::string, std::string> m_sendHeader;
|
||||||
@ -36,6 +45,7 @@ namespace enet {
|
|||||||
bool setPort(uint16_t _port);
|
bool setPort(uint16_t _port);
|
||||||
bool get(const std::string& _address);
|
bool get(const std::string& _address);
|
||||||
bool post(const std::string& _address, const std::map<std::string, std::string>& _values);
|
bool post(const std::string& _address, const std::map<std::string, std::string>& _values);
|
||||||
|
bool post(const std::string& _address, const std::string& _contentType, const std::string& _data);
|
||||||
|
|
||||||
int32_t dataSize(void) {
|
int32_t dataSize(void) {
|
||||||
return m_receiveData.size();
|
return m_receiveData.size();
|
||||||
@ -44,6 +54,9 @@ namespace enet {
|
|||||||
return m_receiveData;
|
return m_receiveData;
|
||||||
}
|
}
|
||||||
std::string dataString(void);
|
std::string dataString(void);
|
||||||
|
std::string escapeChar(const std::string& _value);
|
||||||
|
std::string unEscapeChar(const std::string& _value);
|
||||||
|
bool receiveData(void);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
27
test/index.php
Executable file
27
test/index.php
Executable file
@ -0,0 +1,27 @@
|
|||||||
|
<?php
|
||||||
|
// force display of error
|
||||||
|
error_reporting(E_ALL);
|
||||||
|
ini_set('display_errors', '1');
|
||||||
|
|
||||||
|
date_default_timezone_set('Europe/Paris');
|
||||||
|
|
||||||
|
|
||||||
|
echo "plop<br/>\n";
|
||||||
|
//echo $_POST;
|
||||||
|
if ( isset($_POST) == true
|
||||||
|
&& empty($_POST) == false) {
|
||||||
|
foreach ($_POST as $key => $value) {
|
||||||
|
echo "key='".$key."' val='".$value."'<br>\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ( isset($HTTP_RAW_POST_DATA) == true
|
||||||
|
&& empty($HTTP_RAW_POST_DATA) == false) {
|
||||||
|
echo "raw data :'".$HTTP_RAW_POST_DATA."'<br>\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( isset($_SERVER)
|
||||||
|
&& isset($_SERVER["CONTENT_TYPE"]) ) {
|
||||||
|
echo "content Type : '".$_SERVER["CONTENT_TYPE"]."'<br>\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
@ -15,19 +15,39 @@
|
|||||||
#define __class__ "test"
|
#define __class__ "test"
|
||||||
|
|
||||||
int main(int argc, const char *argv[]) {
|
int main(int argc, const char *argv[]) {
|
||||||
etk::log::setLevel(etk::log::logLevelVerbose);
|
etk::log::setLevel(etk::log::logLevelDebug);
|
||||||
APPL_VERBOSE("plop");
|
APPL_VERBOSE("plop");
|
||||||
if (argc > 2) {
|
if (argc > 2) {
|
||||||
// client mode ...
|
// client mode ...
|
||||||
enet::Http connection;
|
enet::Http connection;
|
||||||
connection.setServer("example.com");
|
connection.setServer("127.0.0.1");
|
||||||
|
connection.setKeepAlive(true);
|
||||||
APPL_INFO("Get data : ");
|
APPL_INFO("----------------------------");
|
||||||
|
APPL_INFO("GET data : ");
|
||||||
if (connection.get("") == false) {
|
if (connection.get("") == false) {
|
||||||
APPL_ERROR("can not Get data...");
|
APPL_ERROR("can not GET data...");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
APPL_INFO("data : " << connection.dataString());
|
APPL_INFO("data : " << connection.dataString());
|
||||||
|
|
||||||
|
APPL_INFO("----------------------------");
|
||||||
|
APPL_INFO("POST data : ");
|
||||||
|
std::map<std::string, std::string> values;
|
||||||
|
values.insert(std::make_pair<std::string, std::string>("plop", "valuePlop"));
|
||||||
|
if (connection.post("", values) == false) {
|
||||||
|
APPL_ERROR("can not POST data...");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
APPL_INFO("data : " << connection.dataString());
|
||||||
|
|
||||||
|
APPL_INFO("----------------------------");
|
||||||
|
APPL_INFO("POST xml : ");
|
||||||
|
if (connection.post("", /*"application/xml"*/ "text/xml; charset=utf-8", "<plop><string>value1</string></plop>") == false) {
|
||||||
|
APPL_ERROR("can not POST XML data...");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
APPL_INFO("data : " << connection.dataString());
|
||||||
|
|
||||||
} else if (argc > 1) {
|
} else if (argc > 1) {
|
||||||
// client mode ...
|
// client mode ...
|
||||||
enet::Tcp connection;
|
enet::Tcp connection;
|
||||||
|
Loading…
Reference in New Issue
Block a user