更新一下說明~先謝謝各位回答
抱歉各位,可能說得不太好,這邊再解釋一下~
就是廠商寄了下面那段程式碼去做API串接(是可以用的),但是我的程式碼需要跟本地資料庫做資料處理(也就是API抓出來的資料要跟MS SQL資料庫做比對)
那現在有兩個解決方案
1.用廠商寄給我的程式碼+我自己寫PHP連MS SQL語法去做資料處理
(但是我的PHP一直連不上MS SQL,下面那段錯誤)
2.用我熟悉的C#去抓廠商的API,然後連MSSQL去做資料處理
(C#要寫抓API的程式,但是API是需要做登入驗證才能抓取,現在搞不定)
所以想問大家有沒有解決方案或是更好的點子~先謝謝各位~~
在更一下好了php連ms sql需要的我應該都有了..
php版本7.3.31
就是不知道為什麼會有問題..
各位好,
小弟現在遇到一個問題就是廠商給了一段程式碼是關於PHP的curl
$curl = curl_init("https://...");
// create the options starting with basic authentication
curl_setopt($curl, CURLOPT_USERPWD, $username . ":" . $password);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_TIMEOUT, 30);
// allow us to use the returned data from the request
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
$return = curl_exec($curl);
curl_close($curl);
但是現在遇到一個問題就是小弟的PHP無論怎麼樣就是連不到資料庫MS SQL(下列為錯誤內容)
1Connection could not be established.
Array ( [0] => Array ( [0] => IM006 [SQLSTATE] => IM006 [1] => 0 [code] => 0 [2] => [Microsoft][ODBC 驅動程式管理員] 驅動程式的 SQLSetConnectAttr 失敗 [message] => [Microsoft][ODBC 驅動程式管理員] 驅動程式的 SQLSetConnectAttr 失敗 ) [1] => Array ( [0] => 01000 [SQLSTATE] => 01000 [1] => 5701 [code] => 5701 [2] => [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]已將資料庫內容變更為 'HRMDB2'。 [message] => [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]已將資料庫內容變更為 'HRMDB2'。 ) [2] => Array ( [0] => 01000 [SQLSTATE] => 01000 [1] => 5703 [code] => 5703 [2] => [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]已將語言設定變更為 繁體中文。 [message] => [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]已將語言設定變更為 繁體中文。 ) )
sqlsrv也都裝了ODBC也裝了,php.ini也都設定了,就是進不去...(SQL SERVER驗證)
所以想說有沒有大神可以救救小弟,或是提供其他方法接API,(API是需要登入驗證的),
目前是用C#的restSharp可是發現還是抓不到資料..
var client = new RestClient();
client.BaseUrl = new Uri(url);
client.Authenticator = new HttpBasicAuthenticator("API帳號", "API密碼");
麻煩各位了...
你要先拿定主意,要用 php 還是用 C#
1.用 php
先完全照抄
廠商提供的程式碼
若需要帳號密碼都先寫死
(也就是先不要從 SQL Server 取得)
2.用 C#
參考這段
var baseAddress = new Uri("http://localhost/");
var cookieContainer = new CookieContainer();
using (var handler = new HttpClientHandler() { CookieContainer = cookieContainer })
using (var client = new HttpClient(handler) { BaseAddress = baseAddress })
{
var content = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string, string>("user", "user1"),
new KeyValuePair<string, string>("pass", "pass1"),
});
cookieContainer.Add(baseAddress, new Cookie("CookieName", "cookie_value"));
var result = await client.PostAsync(baseAddress, content);
result.EnsureSuccessStatusCode();
}
public async Task CreateItemAsync(TodoItem todoItem)
{
var todoItemJson = new StringContent(
JsonSerializer.Serialize(todoItem, _jsonSerializerOptions),
Encoding.UTF8,
"application/json");
using var httpResponse =
await _httpClient.PostAsync("/api/TodoItems", todoItemJson);
httpResponse.EnsureSuccessStatusCode();
}
其實 error 500 是Server
error...
看了你的補充說明,我還是老話一句
你要拿定主意是要用 php 還是 C#
1.用 php,問題變成「php 無法連上 MS SQL Server」
2.用 C#,問題變成「如何用 .NET core C# 連那個 API」
你要解決的只有一個問題,不是兩個問題
感謝海綿大的建議,方法我再試試,感恩
我都用postman:https://www.postman.com/
如果是要測試接API,用postman比較簡單方便,不用自己寫程式。
其實我也有點搞混了。
提供的CURL只是一種API的請求。為何會需要連自已的資料庫?
除非你指的是,你打的API是你自已的機器。而非廠商的機器。
那你就不該從CURL下手。而是從你的API連結那邊的程式碼找答案。
如果不是API自已的機器。就去問廠商。因為那不是你能處理的。
抱歉說明沒有說很好我已經更新問題了~~謝謝大大
首先,先確定幾件事。
如果要從PHP處理的話。基本需要安裝sqldrv也就是可以讓PHP讀mssql的連結應用。
這邊要注意的是,基本上mssql的主帳號(sa),大多數是不允許外部連結的。
所以最好還是另外建個帳號來試。
再來就是需要檢查一下防火是不是有擋住了。MSSQL預設用的PORT是1433
如果以上都無法解決。
那就只好將CURL動作寫入C#來處理。
理論上來說,CURL這個語法在C#中因該是有的。
你只需了解它的傳送值是什麼就行了。
由於C#我並不是很熟,這部份就給其它人回答
謝謝大大回復關於mssql帳號我也有另外開了,1433port有測試過是沒問題的,所以最糟的方式就是C#帶入curl了,謝謝大大抽空回答~