出于某种原因,我必须有一个Windows客户端应用程序(用C#编写),它与我服务器上的PHP文件通信。由于可能会对exe文件进行反汇编,因此不允许Windows应用程序在代码中进行SQL查询。这是使用此方法的主要原因。
基本上它看起来像这样:从Windows客户端我调用getResult.php然后打开与数据库的连接,查询数据库,将结果返回给客户端并关闭数据库连接。因此,Windows客户端没有任何查询数据库的代码,它只是调用PHP文件。
我的几个问题如下:
1.将请求从c#代码发送到PHP文件的最佳方法是什么? (因为我需要发送这个php文件一些参数,如ID等... - >我知道我可以使用GET这样的getResult.php吗?id = 123456,但这与POST同样可能吗?还有,一个问题:如何在代码中执行此操作?http请求或?)
2.自从每次调用PHP文件(我将调用更多文件,如getResult.php,getStatus.php等等)时,我会以某种方式将登录信息发送到该PHP文件PHP将用于查询数据库。我的问题是如何安全地执行此操作,并且加上:是否可能以某种方式调用doLogin.php之类的东西并发送登录用户名和密码一次,之后调用此(以及所有其他)php文件而不需要将登录信息作为参数发送给该函数。我知道当整个应用程序在服务器上时我可以使用PHP会话,但主要区别在于我只调用一些文件,执行它们并关闭连接。
我的主要问题是:从概念的角度来看这是否正常,或者是否有任何众所周知的概念,我不知道 - 请告知我愿意学习。我做了一些研究,并且相信这可能必须通过Web服务方法完成,但请回复您对此的想法。
感谢您的帮助!
答案 0 :(得分:4)
您的PHP代码有效地用作RESTful数据访问API。通过SSL(HTTPS)在Web服务器上运行PHP,以便加密所有通信。
您可以使用受信任的证书来验证客户端,或者如果您需要不同的访问级别,提交用户名/密码以获取数据访问请求的授权令牌并不是一个坏主意。
这是雅虎的一个例子!:http://developer.yahoo.com/dotnet/howto-rest_cs.html
答案 1 :(得分:1)
对于简单的GET,您可以这样做:
var webClient = new WebClient();
webClient.DownloadString("http://someurl.com/somescript.php");
然后您可以从PHP脚本返回XML或JSON格式的响应? 您也可以使用WebClient进行POST。
至于登录,你也可以这样做。我在我的一个应用程序中做了类似的事情。 我们将登录详细信息发送到脚本(ASP.NET而不是PHP),ASP页面返回一个XML响应,告诉C#app它是否成功 - 然后应用程序可以决定是否允许它继续。
答案 2 :(得分:0)
您正在寻找的是REST。在这种情况下,您的PHP文件充当Web服务,您可以使用RESTful准则来确定您的方案的最佳实践。
答案 3 :(得分:0)
您必须在C#app和PHP之间加密数据。为什么?为了安全。您可以轻松地将加密数据存储在MySQL中。
插入表格(myname,mysurename) 值 (AES_ENCRYPT( 'Voon',通),AES_ENCRYPT( 'Voon',通过))
C#work。
HttpWebRequest myRequest =
(HttpWebRequest)WebRequest.Create(URL);
myRequest.Method = "GET";
WebResponse myResponse = myRequest.GetResponse();
StreamReader sr = new StreamReader(myResponse.GetResponseStream(),
System.Text.Encoding.UTF8);
string result = sr.ReadToEnd();
//Console.WriteLine(result);
result = result.Replace('\n', ' ');
sr.Close();
myResponse.Close();
Php代码:
<?php
function connection() {
$mysql_server = "";
$mysql_admin = "";
$mysql_pass = "t";
$mysql_db = "";
@mysql_connect($mysql_server, $mysql_admin, $mysql_pass)
or die('Brak połączenia z serwerem MySQL.');
// łączymy się z bazą danych
@mysql_select_db($mysql_db)
or die('Błąd wyboru bazy danych.');
}
connection();
$data = mysql_query("SELECT QUERY")
or die(mysql_error());
mysql_query("TRUNCATE TABLE `table`") or die(mysql_error());
while($info = mysql_fetch_array( $data ))
{
$stringData = $info['columnname'] . ",";
$temp = $stringData;
$stringData =$info['columnname'];
$temp = "$temp" . "$stringData";
echo "$temp" . ".";
}
}
?>
此代码。在C#中调用php和getresult(column.column,next column.column)。发送数据后,它重新创建表。
希望它适合你。
EDIT! 要使用参数调用链接,请使用:
PHP中的
$myname = $_REQUEST['myname'];
例如。 http://mylink/setname.php?myname=VoonArt
PHP存储在变量VoonArt
2)使用https发送重要数据。也加密它。在C#和PHP(triple-des)中使用相同的加密
C#-->Encode Pass-->Hey PHP can you get me some data my password is &283&(^@(08218--> Okay, C# I'll decode your password and send you result!-->PHP decode password --> PHP getdata -->php encode data with (eg. triple-des) --> Hey C# catch, you own me a beer huh?