iT邦幫忙

1

除了PHP還有什麼方法可以連API取資料(API有驗證) ---更

更新一下說明~先謝謝各位回答
抱歉各位,可能說得不太好,這邊再解釋一下~
就是廠商寄了下面那段程式碼去做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
https://ithelp.ithome.com.tw/upload/images/20211129/20112075RS88Z1rXFQ.png
https://ithelp.ithome.com.tw/upload/images/20211129/20112075HnGmpGyQP8.png

就是不知道為什麼會有問題..


各位好,
小弟現在遇到一個問題就是廠商給了一段程式碼是關於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密碼");

麻煩各位了...

看更多先前的討論...收起先前的討論...
mayyola iT邦研究生 4 級 ‧ 2021-11-26 16:50:34 檢舉
這個可以嗎?
$client = new SoapClient("https://www.samtseng.liho.tw/~samtz/soap/demo.wsdl", array('login' =>
'demo', 'password' => 'xxxxxxxxxxxxxxxxxx'));
Luke iT邦新手 2 級 ‧ 2021-11-26 17:07:49 檢舉
不懂您的問題 是PHP 連結 資料庫
還是 C# 使用Web API 無法用
Luke iT邦新手 2 級 ‧ 2021-11-26 18:04:45 檢舉
搞不好~是(廠商給了一段程式碼是關於PHP的curl) 丟出來的錯誤資訊
當事人,一直是自己PHP上沒有安裝MS SQL... 會不會是這樣?


還是廠商給了一段程式碼內包含連接資料庫?
Python也是我常用來偽造Header爬資料用的方法~~
抱歉PHP也有裝sqlsrv了,全部程序都有用好,但是就是連不到QQ...
1
海綿寶寶
iT邦大神 1 級 ‧ 2021-11-26 17:31:59
最佳解答

你要先拿定主意,要用 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();
}
看更多先前的回應...收起先前的回應...

這個變成500 error..我再研究看看
因為我是用.net core MVC開發的可能有些不同

參考這篇ASP.NET core 發 POST

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」

你要解決的只有一個問題,不是兩個問題

感謝海綿大的建議,方法我再試試,感恩

1
小魚
iT邦大師 1 級 ‧ 2021-11-26 17:30:51

curl是爬蟲或接API用的,
跟連資料庫有甚麼關係?

你好像突破盲腸啦/images/emoticon/emoticon16.gif

都需要做到/images/emoticon/emoticon02.gif

2
fillano
iT邦超人 1 級 ‧ 2021-11-26 23:51:27

我都用postman:https://www.postman.com/

如果是要測試接API,用postman比較簡單方便,不用自己寫程式。

2

其實我也有點搞混了。

提供的CURL只是一種API的請求。為何會需要連自已的資料庫?

除非你指的是,你打的API是你自已的機器。而非廠商的機器。
那你就不該從CURL下手。而是從你的API連結那邊的程式碼找答案。

如果不是API自已的機器。就去問廠商。因為那不是你能處理的。

抱歉說明沒有說很好我已經更新問題了~~謝謝大大

首先,先確定幾件事。

如果要從PHP處理的話。基本需要安裝sqldrv也就是可以讓PHP讀mssql的連結應用。
這邊要注意的是,基本上mssql的主帳號(sa),大多數是不允許外部連結的。
所以最好還是另外建個帳號來試。
再來就是需要檢查一下防火是不是有擋住了。MSSQL預設用的PORT是1433

如果以上都無法解決。
那就只好將CURL動作寫入C#來處理。
理論上來說,CURL這個語法在C#中因該是有的。
你只需了解它的傳送值是什麼就行了。
由於C#我並不是很熟,這部份就給其它人回答

謝謝大大回復關於mssql帳號我也有另外開了,1433port有測試過是沒問題的,所以最糟的方式就是C#帶入curl了,謝謝大大抽空回答~

我要發表回答

立即登入回答